Author: ChinSyun Pang
Weibo: arthinking_plus
Posted in: http://www.itzhai.com
职责链模式
说明:
通过把对象链接起来,给更多的对象处理请求的机会。
使用场景:
- 多个对象需要处理一个请求,并且处理请求的对象不是特定的;
- 运行期才能决定哪些对象需要处理这个请求;
- 允许出现一个请求可能不被其中一个对象处理的情况;
实例:
Java语言的异常处理实现使用了职责链模式;
命令模式
说明:
把一个请求封装成一个对象,让请求被当成基于对象的形式进行处理,如回调。
使用场景:
- 你需要回调函数的时候;
- 请求需要在不同的时间或者通过不同的顺序进行处理;
- 需要请求的历史记录;
- 调用者需要和执行者解耦的时候
实例:
任务队列
解析器模式
说明:
为文法提供一个解析的机制。
使用场景:
- 需要把文法解析成一个大的语法树;
- 文法比较简单;
- 解析的过程中性能并不是很重要;
- 需要把文法和解析式进行解耦;
实例
上个世纪80年代流行的基于文字的冒险游戏。
迭代器模式
说明:
在不知道集合类实现的情况下,实现访问集合元素的功能。
使用场景:
- 不访问对象的情况下,需要访问到对象里面的元素
- 需要支持多线程或者并发遍历集合
- 需要一个同一个遍历接口
- 不同的迭代器实现由细微的差别
实例:
Java的集合类就很好的用到了迭代器模式,允许用户在不知道集合的实现的情况下遍历各种类型的数据集合。
中介者模式
说明:
通过封装不同对象集的交互来达到解耦这些对象。
使用场景:
- 对象间的交流动作有明确的定义,并且很复杂;
- 对象间存在复杂的交互关系,并且需要一个中央的控制节点来转发这些交互。
实例:
邮件群发系统,通过中介者模式,发送者无需记录哪些邮件地址是否注册了,把邮件发给中介者,中介者把邮件转发给有效的接收者。
备忘录模式
说明:
在不违反封装性的前提下,允许捕获并且外化一个对象的内部状态,以便存储下来。
使用场景:
- 一个对象的内部状态需要存储下来;
- 一个对象的内部状态没有提供对外暴露的接口;
- 封装的边界必须被保存
实例:
撤销动作,通过建立对象的一个快照实现。
观察者模式
说明:
在一个系统中,当一个对象的状态改变的时候,通知其他对象。
使用场景:
- 一个或多个对象状态的改变触发其他对象的处理事件
- 需要广播的能力
实例:
在大部分的GUI环境中都有用到这个设计模式,通过把按钮,文本区等注册为观察者,当一个用户触发一个事件,就发送一个通知到所有的观察者。
状态模式
说明:
使用场景:
实例:
策略模式
模板模式
访问者模式
适配器模式