设计模式总结

1. 设计模式总结

1.1. SOLID原则

1.1.1. 单一责任原则(SRP)

  1. 当修改某个类的时候,原因有且只有一个,也就是让一个类只做一种类型责任

1.1.2. 开放封闭原则(OCP)

  1. 软件实体应该是可扩展但不可修改的

1.1.3. 里氏替换原则(LSP)

  1. 子类实例应该能够替换任何其超类的实例

1.1.4. 接口分离原则(ISP)

  1. 使用多个专门的接口比使用一个大接口要好,减少其依赖性

1.1.5. 依赖注入或倒置原则(DIP)

  1. 高层模块不应该依赖底层模块,二者都应该依赖于抽象
  2. 抽象不应该依赖于具体实现,具体实现应该依赖于抽象

1.2. 简单工厂模式

  1. 违反了开放封闭原则,扩展需要修改工厂类

1.3. 工厂模式

1.4. 抽象工厂

  1. 创建工厂的工厂

1.5. 三种工厂方式的区别

  1. 简单工厂,在工厂内部创建不同的产品,不符合5大设计原则中的开闭原则
  2. 工厂模式设计上每一产品都有自己的工厂,每创建一个产品需要创建它的工厂实现和产品实现,但耦合度降低,易于扩展
  3. 抽象工厂,是创建工厂的工厂,工厂和他的不同实现类都有自己的抽象接口,进一步降低了耦合度

1.6. 单例模式

1.6.1. 防止反射创建打破单例

  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. 复杂流程的构建
  2. 多步构造流程/算法
  3. 构造类似种类产品,构造流程相同,表示不同
  4. 构造和表示分离

1.8. 流畅接口模式Fluent interface

  1. 构造方法,显微镜构造方式,多种构造函数
  2. javaBean构造方式,使用set方式注入参数,状态可变不安全
  3. 流畅接口
  4. 只有get方法,没有set,保证了不可变性,属性final修饰,必须在构造函数中初始化
  5. 每个设置都返回自身进行参数构建,最后build进行产品构建

1.8.1. 好处

  1. 参数组合更灵活
  2. 参数设置直观表意
  3. 一个构造器实例可以构造多个对象表示
  4. 构造出不可变对象(immutable objects)
原文地址:https://www.cnblogs.com/sky-chen/p/10537452.html