设计模式
摘抄自《设计模式 - 可复用面向对象软件的基础》
每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动。
--- Christopher Alexander
什么是设计模式
本书的设计模式是对用来特定场景下解决一般设计问题的类和互相通信的对象的描述
一个模式有四个基本要素
- 模式名(pattern name):一个助记名,它用两个词来描述模式的问题、解决方案和效果。
- 问题(problem):描述了应该在何时使用模式
- 解决方案(solution):描述了设计的组成成分、他们之间的相互关系及各自的职责和协作方式。
- 效果(consequence):描述了模式应用的效果及使用模式应权衡的问题
组织编目
创建型(creational) | 结构型(structural) | 行为型(behavioral) | |
---|---|---|---|
类 | Factory Method(3.3) | Adapter( 类 )(4.1) | Interpreter(5.3) Template Method(5.10) |
对象 | Abstract Factory(3.1) | Adapter( 对象 )(4.1) | Chain of Responsibility(5.1) |
Builder(3.2) | Bridge(4.2) | Command(5.2) | |
Prototype(3.4) | Composite(4.3) | Iterator(5.4) | |
Singleton(3.5) | Decorator(4.4) | Mediator(5.5) | |
Facade(4.5) | Memento(5.6) | ||
Flyweight(4.6) | Observer(5.7) | ||
Proxy(4.7) | State(5.8) | ||
Strategy(5.9) | |||
Visitor(5.10) |
根据两条准则分类
- 目的准则,即模式是用来完成什么工作的。分为:
- 创建型与对象的创建有关
- 构造型处理类或对象的组合
- 行为型对类或对象怎样交互和怎样分配职责进行描述
- 范围准则,指定模式用于类还是对象:
- 类模式处理类和子类之间的关系,这些关系通过继承建立,是静态的,在编译时变确定下来
- 对象模式处理对象间的关系,这些关系在运行时间是可以变化的,更具动态性。
怎样使用设计模式
- 大致浏览一遍模式
- 回头研究结构部分、参与者部分和协作部分
- 看代码示例部分,看看这个模式代码形式的具体例子
- 选择模式参与者的名字,是他们在应用上下文中有意义
- 定义类
- 定义模式中专用与应用的操作名称
- 实现执行模式中责任和协作的操作