设计模式笔记

Author: ChinSyun Pang
Weibo: arthinking_plus
Posted in: http://www.itzhai.com

职责链模式

说明:

通过把对象链接起来,给更多的对象处理请求的机会。

使用场景:

  • 多个对象需要处理一个请求,并且处理请求的对象不是特定的;
  • 运行期才能决定哪些对象需要处理这个请求;
  • 允许出现一个请求可能不被其中一个对象处理的情况;

实例:

Java语言的异常处理实现使用了职责链模式;

命令模式

说明:

把一个请求封装成一个对象,让请求被当成基于对象的形式进行处理,如回调。

使用场景:

  • 你需要回调函数的时候;
  • 请求需要在不同的时间或者通过不同的顺序进行处理;
  • 需要请求的历史记录;
  • 调用者需要和执行者解耦的时候

命令模式在MVC框架中的应用

实例:

任务队列

解析器模式

说明:

为文法提供一个解析的机制。

使用场景:

  • 需要把文法解析成一个大的语法树;
  • 文法比较简单;
  • 解析的过程中性能并不是很重要;
  • 需要把文法和解析式进行解耦;

实例

上个世纪80年代流行的基于文字的冒险游戏。

迭代器模式

说明:

在不知道集合类实现的情况下,实现访问集合元素的功能。

使用场景:

  • 不访问对象的情况下,需要访问到对象里面的元素
  • 需要支持多线程或者并发遍历集合
  • 需要一个同一个遍历接口
  • 不同的迭代器实现由细微的差别

实例:

Java的集合类就很好的用到了迭代器模式,允许用户在不知道集合的实现的情况下遍历各种类型的数据集合。

中介者模式

说明:

通过封装不同对象集的交互来达到解耦这些对象。

使用场景:

  • 对象间的交流动作有明确的定义,并且很复杂;
  • 对象间存在复杂的交互关系,并且需要一个中央的控制节点来转发这些交互。

实例:

邮件群发系统,通过中介者模式,发送者无需记录哪些邮件地址是否注册了,把邮件发给中介者,中介者把邮件转发给有效的接收者。

备忘录模式

说明:

在不违反封装性的前提下,允许捕获并且外化一个对象的内部状态,以便存储下来。

使用场景:

  • 一个对象的内部状态需要存储下来;
  • 一个对象的内部状态没有提供对外暴露的接口;
  • 封装的边界必须被保存

实例:

撤销动作,通过建立对象的一个快照实现。

观察者模式

说明:

在一个系统中,当一个对象的状态改变的时候,通知其他对象。

使用场景:

  • 一个或多个对象状态的改变触发其他对象的处理事件
  • 需要广播的能力

实例:

在大部分的GUI环境中都有用到这个设计模式,通过把按钮,文本区等注册为观察者,当一个用户触发一个事件,就发送一个通知到所有的观察者。

状态模式

说明:

使用场景:

实例:

策略模式

模板模式

访问者模式

适配器模式

桥接模式

组合模式

装饰者模式

门面模式

享元模式

代理模式

抽象工厂模式

构建者模式

工厂方法模式

原型模式

单例模式