设计模式分类
创建型模式
- 工厂方法模式
- 抽象工厂模式
- 单例模式
- 建造者模式
- 原型模式
结构型模式
- 适配器模式
- 装饰器模式
- 代理模式
- 外观模式
- 桥接模式
- 组合模式
- 享元模式
行为型模式
- 策略模式
- 模板方法模式
- 观察者模式
- 迭代子模式
- 责任链模式
- 命令模式
- 备忘录模式
- 状态模式
- 访问者模式
- 中介者模式
- 解释器模式
设计模式的六大原则
-
开闭原则
- 定义:对扩展开放,对修改关闭。
- 目标:提高程序的扩展性和维护性。
- 实现:使用接口和抽象类。
-
里氏代换原则
- 定义:任何基类可以出现的地方,子类一定可以出现。
- 目标:增强继承复用的有效性和安全性。
- 实现:确保子类可以替换基类。
-
依赖倒转原则
- 定义:真对接口编程,依赖于抽象而不依赖于具体。
- 目标:降低依赖性,提高灵活性。
-
接口隔离原则
- 定义:使用多个隔离的接口,比使用单个接口要好。
- 目标:降低类间的耦合度。
-
迪米特法则(最少知道原则)
- 定义:一个实体应当尽量少地与其他实体发生相互作用。
- 目标:保持模块间的独立性。
-
合成复用原则
- 定义:尽量使用合成/聚合的方式,而不是使用继承。
- 目标:提高代码的复用性和灵活性。
创建型模式示例
1. 工厂模式
- 描述:客户类和工厂类分开,消费者无需修改即可接纳新产品。
2. 建造者模式
- 描述:将产品的内部表象和产品的生成过程分离,使产品内部表象可以独立变化。
3. 工厂方法模式
- 描述:核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类。
4. 原型模式
- 描述:通过复制一个原型对象来创建新的对象。
5. 单例模式
- 描述:确保某一个类只有一个实例,并自行实例化并向整个系统提供这个实例。
结构型模式示例
6. 适配器模式
- 描述:将一个类的接口转换成另一个接口,使原本因接口不兼容而不能一起工作的类可以一起工作。
7. 桥梁模式
- 描述:将抽象化与实现化分离,使二者可以独立变化。
8. 组合模式
- 描述:将对象组织到树形结构中,描述整体与部分的关系。
9. 装饰模式
- 描述:动态地给一个对象添加一些额外的职责。
10. 外观模式
- 描述:为子系统提供一个一致的接口,使子系统更易于使用。
11. 享元模式
- 描述:以共享的方式高效地支持大量细粒度对象。
12. 代理模式
- 描述:给某一个对象提供一个代理对象,并由代理对象控制对源对象的引用。
行为型模式示例
13. 责任链模式
- 描述:将多个对象通过引用串连成一条链,请求沿着这条链传递,直到有对象处理它为止。
14. 命令模式
- 描述:将请求封装成对象,以便使用不同的请求、队列请求或记录请求日志,支持可撤销的操作。
15. 解释器模式
- 描述:给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。
16. 迭代子模式
- 描述:顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。
17. 调停者模式
- 描述:将一组对象互相作用的方式进行封装,使它们不必显式地相互引用。
18. 备忘录模式
- 描述:在不破坏封装性的前提下捕获一个对象的内部状态,并在该对象之外保存这个状态。
19. 观察者模式
- 描述:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
20. 状态模式
- 描述:允许一个对象在其内部状态改变时改变它的行为。
21. 策略模式
- 描述:定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。
22. 模板方法模式
- 描述:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。
23. 访问者模式
- 描述:封装一些作用于某种数据结构元素之上的操作,使得无需修改数据结构即可定义作用于这些元素的新操作。