^

Young Anything I do that may help others, I'll post it here.

Decorator Pattern

装饰模式

去超市买塑料袋,另外又用很多花哨的塑料袋来层层包装买的塑料袋。各个包装的先后顺序可控,按需选择装饰功能包装原始对象。

目的

  • 动态地向已有对象添加功能
  • 替代子类化
  • 弹性设计
  • 支持开闭原则

decorator

Decorator类构造函数传入Component的子类给属性赋值,该属性是protected的。

...
more »

Composite Pattern

组合模式

将对象组合到树结构中以表示部分-整体层次结构。Composite允许客户端统一地处理单个对象和对象的组合。

抽象出枝节点和叶节点的统一的行为接口,让client端可以对他们一视同仁,简化操作。

何时使用

  1. 需求中是体现部分和整体层次结构时;
  2. 希望用户可以忽略组合对象与单个对象的不同,统一使用组合结构中的所有对象时;
  3. 想要分发什么东西到对象时。

优点

  1. 基本对象可悲组合为更复杂的组合对象,用到基本对象的地方都可以使用组合对象;
  2. 用户不用关心到底是处理叶节点还是一个组合组件,也不用为定义组合而写一些判断语句。即客户可以一致地使用组合结构和单个对象。

composite

...
more »

Command Pattern

命令模式

优点

  • 把命令的执行抽象为类,执行命令的client 与 命令逻辑及其依赖项 解耦;

  • 收集命令为队列,使命令可以延迟执行;
  • 命令,aka 事务(transaction),行动(action);
  • 可方便地对命令进行日志记录,验证,撤销;
  • 很容易添加新命令,符合开闭原则;
  • 完全自包含,客户端不会直接传任何参数给命令,而是通过一个invoker来调用命令;
  • 注意为了安全要有个null command;

何时使用

  1. 当需要将执行命令的client与命令逻辑及其依赖项解耦时,请求操作的对象(invoker)与知道具体如何操作的对象(command & receiver )分割开;
  2. 设计命令行工具;
  3. 真正需要实现命令的验证、撤销和恢复时。

相关模式

  • 工厂模式,常用来结合到命令模式中,生产命令实例;
  • 组合模式(执行一个命令,其所有子命令全部执行)。

command

...
more »

Chain of Responsibility Pattern

责任链模式

何时使用

  • 对于一条message有超过一个handler可以处理它
  • 发送message的sender一开始并不能明确得知最终合适的handler
  • handler的集合可以被动态地定义(node handler用起来可以按需连接)

责任链优点

  • 减少耦合
  • 动态地管理 message handlers
  • 责任链的末尾可以适当的自定义

与其有关的模式

  • Composite组合模式
  • 责任树模式(也就是字面意思)

strategy

...
more »

Builder Pattern

建造者模式

为了构造很复杂的对象,把logic从data中分离出来,以便能够重用logic。

这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。

做三明治的步骤顺序一般固定,但是每一步骤都可以有很多种变换。

Builder-Pattern

  1. Director负责组织Concrete Builder的product构造逻辑顺序 (logic);
  2. Builder (abstract interface) 负责定义product的每一步抽象逻辑;
  3. Concrete Builder定义product的每一步具体逻辑;
...
more »