参照大牛的总结,精简成自己能理解的说法,有不对的欢迎指出
设计模式分三大类
- 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式
- 结构型模式,共七种:适配器模式、装饰者模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
- 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
设计模式六大原则(总结:最终是为了实现“开闭原则”,即关闭修改,开发扩展)
- 单一职责原则:对某一个类,应单一职责,在需求扩展时,可避免修改代码。
- 里氏替换原则:基类可以在任何地方替换成子类,子类应尽量不要重写或重载基类的方法,因为基类是一个规范,子类不应破坏这个规范。
- 依赖倒转原则:面向接口编程,可以很大程度与单个具体类解耦。
- 接口隔离原则:每个接口,如果子类中有不需要,但却必须实现的方法,则需将接口拆分。
- 迪米特法则:一个类对自己依赖的类知道的越少越好,即应该将逻辑封装。
- 合成复用原则:尽量首先使用合成/聚合的方式,而不是使用继承。
创建型模式
- 工厂模式
- 使用场景:创建对象
- 说明:
- 简单工厂模式:一个工厂,根据传参不同,生成不同种类对象
- 工厂方法模式:多个工厂,每个工厂专门生成一种对象
- 抽象工厂模式
- 使用场景:创建对象
- 说明:多个工厂,每个工厂专门生成一个产品族的多种对象
- 单例模式
- 使用场景:从始至终,只需要同一个对象
- 说明:
- 懒汉式单例:获取对象时,判断静态工厂类中的该静态属性不为空,则生成对象,放入静态属性,否则就直接返回。线程不安全,三种方法使线程安全,方法锁,类锁,静态内部类(类加载时,就生成对象放在静态内部类)
- 饿汉式单例:类加载时,就生成对象放在静态属性中,每次调用返回该属性。线程安全
- 建造者模式
- 使用场景:创建初始化复杂的一个产品族的多种对象,即有相同初始化流程的多种对象
- 说明:提前定义好建造流程,传入具体建造器的实现(即对象针对流程的具体实现),得到相应对象
- 原型模式
- 使用场景:用于对象的复制,主要用于new比较耗资源或者麻烦的时候,直接生成一个对象
- 说明:调用clone方法
- 组成:
- 原型抽象类:实现Cloneable接口,重写clone方法
- 具体原型类:继承原型抽象类
行为型模式
- 策略模式
- 使用场景:一个系统需要动态地在几种算法中选择一种
- 说明:调用时,创建具体策略类传入环境类中,调用环境类中的算法方法,传入不同的具体策略类,会调用不同的算法,这样所有的算法就不会在同一个文件中,更容易维护
- 组成:
- 抽象策略类:定义公共行为的接口
- 具体策略类:实现行为的具体算法
- 环境类:需传入具体策略类构建,环境类中,有一个统一调用算法的方法,实际则是调用具体策略类的算法