1. 设计模式总结
1.1. SOLID原则
1.1.1. 单一责任原则(SRP)
- 当修改某个类的时候,原因有且只有一个,也就是让一个类只做一种类型责任
1.1.2. 开放封闭原则(OCP)
- 软件实体应该是可扩展但不可修改的
1.1.3. 里氏替换原则(LSP)
- 子类实例应该能够替换任何其超类的实例
1.1.4. 接口分离原则(ISP)
- 使用多个专门的接口比使用一个大接口要好,减少其依赖性
1.1.5. 依赖注入或倒置原则(DIP)
- 高层模块不应该依赖底层模块,二者都应该依赖于抽象
- 抽象不应该依赖于具体实现,具体实现应该依赖于抽象
1.2. 简单工厂模式
- 违反了开放封闭原则,扩展需要修改工厂类
1.3. 工厂模式
1.4. 抽象工厂
- 创建工厂的工厂
1.5. 三种工厂方式的区别
- 简单工厂,在工厂内部创建不同的产品,不符合5大设计原则中的开闭原则
- 工厂模式设计上每一产品都有自己的工厂,每创建一个产品需要创建它的工厂实现和产品实现,但耦合度降低,易于扩展
- 抽象工厂,是创建工厂的工厂,工厂和他的不同实现类都有自己的抽象接口,进一步降低了耦合度
1.6. 单例模式
1.6.1. 防止反射创建打破单例
- 在创建实例的时候抛异常
1.6.2. 防止反序列化的创建方式
public class DemoSingleton implements Serializable {
private static final long serialVersionUID = -7604766932017737115L;
private static class LazyHolder{
private static final DemoSingleton INSTANCE = new DemoSingleton();
}
public static DemoSingleton getInstance(){
return LazyHolder.INSTANCE;
}
// 确保反序列化单例
protected Object readResolve() {
return getInstance();
}
}
1.7. 建造者模式
- 复杂流程的构建
- 多步构造流程/算法
- 构造类似种类产品,构造流程相同,表示不同
- 构造和表示分离
1.8. 流畅接口模式Fluent interface
- 构造方法,显微镜构造方式,多种构造函数
- javaBean构造方式,使用set方式注入参数,状态可变不安全
- 流畅接口
- 只有get方法,没有set,保证了不可变性,属性final修饰,必须在构造函数中初始化
- 每个设置都返回自身进行参数构建,最后build进行产品构建
1.8.1. 好处
- 参数组合更灵活
- 参数设置直观表意
- 一个构造器实例可以构造多个对象表示
- 构造出不可变对象(immutable objects)