一、起源
在 1994 年,《Design Patterns - Elements of Reusable Object-Oriented Software》这本由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四人合著的书出版了,在这本书中首次提出了软件开发中设计模式的概念。
二、基本原则
- 对接口编程而不是对实现编程。
- 优先使用对象组合而不是继承。
三、分类
在《Design Patterns - Elements of Reusable Object-Oriented Software》这本书中提及了共23种设计模式,可以分为三大类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)、行为型模式(Behavioral Patterns)。
创建型模式(Creational Patterns)中所包括的5种模式注重的是如何去创建对象,使得程序在针对给定实例时创建对应的对象更加灵活。
结构型模式(Structural Patterns)所关注的是类和对象的组合方式。如何组合接口,如何定义组合对象获得所需要的新功能。
行为型模式(Behavioral Patterns)所关注的是对象之间的通信方式。对象与对象之间如何准确、高效的进行通信。
创建型模式共有5种,包括:
- 单例模式
- 工厂模式
- 抽象工厂模式
- 创建者模式
- 原型模式
结构型模式共有7种,包括:
- 代理模式
- 装饰模式
- 适配器模式
- 桥接模式
- 组合模式
- 外观模式
- 享元模式
行为型模式共有11种,包括:
- 模板模式
- 命令模式
- 责任链模式
- 策略模式
- 中介者模式
- 观察者模式
- 备忘录模式
- 访问者模式
- 状态模式
- 解释器模式
- 迭代器模式
四、六大原则
1、开闭原则(Open Close Principle)
具体意思:对扩展开放,对修改关闭。
2、里氏代换原则(Liskov Substitution Principle)
里氏代换原则中强调:任何基类可以出现的地方,子类一定可以出现。里氏代换原则是对开闭原则的补充。实现开闭原则的关键步骤就是抽象化,而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。
3、依赖倒转原则(Dependence Inversion Principle)
具体内容:针对接口编程,依赖于抽象而不依赖于具体。
4、接口隔离原则(Interface Segregation Principle)
具体意思:使用多个隔离的接口,比使用单个接口要好,用以降低类间耦合度。
5、迪米特法则,又称最少知道原则(Demeter Principle)
具体意思:一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。
6、合成复用原则(Composite Reuse Principle)
具体意思:尽量使用合成/聚合的方式,而不是使用继承。
范围 | 目的 | ||
创建型 | 结构型 | 行为型 | |
类 | 工厂模式 |
适配器模式 |
解释器模式 |
模板模式 | |||
对象
|
单例模式 | 代理模式 | 命令模式 |
抽象工厂模式 | 装饰模式 | 责任链模式 | |
创建者模式 | 桥接模式 | 策略模式 | |
原型模式 | 组合模式 | 中介者模式 | |
外观模式 | 观察者模式 | ||
享元模式 | 备忘录模式 | ||
访问者模式 | |||
状态模式 | |||
迭代器模式 |