什么是设计模式?顾名思义,设计模式是一种软件设计所使用的方法,适用于面向对象软件设计。设计模式是一种方法,或者说是一种方法论,它是软件前辈们经历了无数的软件工程设计中的痛点和教训之后,总结出来的经验的结晶。设计模式是一种软件设计方法,不是代码,也不是规范。

1. 设计模式的提出

如果设计出优秀的软件一直是软件从业者探索的目标。优秀的软件,必须具备可复用可扩展可维护高性能等特点,既要保证系统的高内聚、低耦合的特点,又要保证系统随时应对各种变化的灵活性。然很,这往往依赖于软件设计者的个人经验积累,而新手往往对此无从下手。

设计模式的提出,为软件设计指明了方向。

设计模式概念的提出,要追溯到1994年。在1994年,由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides 四为软件大师合著了一本名为 Design Patterns - Elements of Reusable Object-Oriented Software(中文译名:设计模式 - 可复用面向对象软件的基础)的书,该书首次提到了软件开发中设计模式的概念。

设计模式 可复用面向对象软件设计的基础封面
Figure 1. 设计模式-可复用面向对象软件设计的基础

Ps: 公众号后台回复关键字"设计模式"下载此书

该书总结了面向对象设计中最有价值的经验,并总结出了23中最常见和最有价值的设计模式,为软件设计之路开启了一盏明灯,此书的四名作者又被称为GOF(Gang Of Four,四人帮)。这23种设计模式主要基于面向对象设计的两种基本原则:

  • 对接口编程而不是对实现编程

  • 优先使用对象组合而不是继承

2. 设计模式的概念

设计模式来源于城市和建筑模式:

每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题解决方案的核心。这样,你就能一次又一次的使用该方案而不必做重复劳动。

— Christopher Alexander

这个思想同样适用于面向对象的设计模式。一般而言,设计模式包含四大要素:

  • 名称(pattern name): 描述模式解决的问题、方案和效果

  • 问题(problem): 描述何时使用模式、设计的问题以及问题存在的背景

  • 解决方案(solution): 描述了设计的组成部分、他们之间的相互关系和协作的方式

  • 效果(consequence): 描述了使用模式应该达到的效果和应该权衡的问题

3. 设计模式的类型

书中对设计模式进行了详细阐述,并将设计模式分为三大类型:

3.1. 创建型模式(Creational)

对象怎么创建?Java中,最简单的是使用关键 new 来创建一个对象实例,然而,我们需要思考:我们需要这么多对象实例吗?这种方式是我们需要的吗?这种方式是最好的吗?创建型模式抽象了对象实例化过程,它描述了如何去创建对象,而无需关注实例化细节。创建型模式包括:

  1. 简单工厂模式(Factory Pattern)、 抽象工厂模式(Abstract Factory Pattern)、 工厂方法模式(Factory Method Pattern)

  2. 单例模式(Singleton Pattern)

  3. 原型模式(Prototype Pattern)

  4. 建造者模式(Builder Pattern)

3.2. 结构型模式(Stuctural)

结构型模式,描述了如何组合类和对象以获得最大的结构,通常这些模式使用继承的方式来进行组合,包括:

  1. 适配器模式](Adapter Pattern)

  2. 桥接模式](Bridge Pattern)

  3. 组合模式](Composite Pattern)

  4. 装饰器模式](Decorator Pattern)

  5. 外观模式](Facade Pattern)

  6. 享元模式](Flyweight Pattern)

  7. 代理模式](Proxy Pattern)

3.3. 行为型模式(Behavioral)

行为型模式,描述了对象间职责的分配和通信模式,涉及到算法,主要关注在运行时难以跟踪的复杂的控制流程,并将其转义到对象间的关系上来。行为型模式有:

  1. 责任链模式](Chain of Responsibility Pattern)

  2. 命令模式(Command Pattern)

  3. 解释器模式(Interpreter Pattern)

  4. 迭代器模式(Iterator Pattern)

  5. 中介者模式(Mediator Pattern)

  6. 备忘录模式(Memento Pattern)

  7. 观察者模式(Observer Pattern)

  8. 状态模式(State Pattern)

  9. 策略模式(Strategy Pattern)

  10. 模板方法模式(Template Pattern)

  11. 访问者模式(Visitor Pattern)

the relationship between design patterns
Figure 2. 设计模式间的关系

3.4. 其他设计模式

  1. 空对象模式(Null Object Pattern)

  2. 委派模式(Delegate Pattern)

4. 设计模式遵循的七大原则

设计模式遵循软件设计的 七大原则,他们包括:

  1. 单一职责原则(Single Responsibility)

  2. 开闭原则(Open Close Principle)

  3. 里氏代换原则(Liskov Substitution Principle)

  4. 依赖倒转原则(Dependence Inversion Principle)

  5. 接口隔离原则(Interface Segregation Principle)

  6. 迪米特法则,又称最少知道原则(Demeter Principle)

  7. 合成复用原则(Composite Reuse Principle)

这些原则我们将在下篇详细讨论。


相关阅读