单例和工厂方法模式

master
kn5886348135 3 years ago
parent 218315670e
commit 7e2d22e6af

@ -14,12 +14,14 @@
### 六大设计原则
* 单一职责原则
* 开放封闭原则
* 里氏替换原则
* 接口隔离原则
* 依赖倒转原则
* 迪米特法则
  设计模式中主要有六大设计原则简称为SOLID是由于各个原则的首字母简称合并的来(两个L算一个,solid 稳定的)。
* 单一职责原则 Single Responsibitity Principle
* 开放封闭原则 Open Close Principle
* 里氏替换原则 Liskov Substitution Principle
* 接口隔离原则 Interface Segregation Principle
* 依赖倒转原则 Dependence Inversion Principle
* 迪米特法则 Least Knowledge Principle
<br />
### 设计模式

@ -0,0 +1,24 @@
## 1、单例模式
### 定义
&emsp;&emsp;确保一个类只有一个实例,并提供一个全局访问点。
<br />
### 实现方式
* &emsp;饿汉式(也叫象牙塔IvoryTower),静态变量初始化实例保证线程安全
* &emsp;懒汉式,无法保证线程安全
* &emsp;双检查锁机制线程安全并保证并发量volatile关键字。
* &emsp;静态内部类
* &emsp;枚举方式jdk不能通过反射方式创建枚举实例反序列化通过枚举类名和枚举名称调用java.lang.Enum.valueOf(Class<T> enumType,String name)拿到枚举实例。
<br>
&emsp;&emsp;可以在私有的构造方法中添加非空判断并抛出异常阻止反射创建实例。添加readResolve()方法,返回单例对象,防止反序列化。
## 2、工厂方法
&emsp;&emsp;定义用于创建对象的接口但让子类决定实例化哪个类。工厂方法让类将实例化推迟到子类。所有子类创建的对象都实现同一个接口达到不同对象调用同一个方法实现不同的逻辑。可以使用枚举类和map保存不同类型的工厂。
![factory-method](./factory-method.urm.png)
&emsp;&emsp;简单工厂是工厂方法的特例。
&emsp;&emsp;用户只需要知道具体工厂的名字或者枚举值,就可以获取对应的对象,不需要关心对象的创建过程。在系统新增对象的时候,只需要添加具体对象的类和对应的具体工厂、枚举值,不需要对原工厂进行修改,满足了开闭原则。
&emsp;&emsp;每增加一个对象就需要一个具体的类,会增加系统的复杂度。
Loading…
Cancel
Save