04 Mar 2019
装饰模式
去超市买塑料袋,另外又用很多花哨的塑料袋来层层包装买的塑料袋。各个包装的先后顺序可控,按需选择装饰功能包装原始对象。
目的
- 动态地向已有对象添加功能
- 替代子类化
- 弹性设计
- 支持开闭原则
Decorator类构造函数传入Component的子类给属性赋值,该属性是protected的。
...
04 Mar 2019
组合模式
将对象组合到树结构中以表示部分-整体层次结构。Composite允许客户端统一地处理单个对象和对象的组合。
抽象出枝节点和叶节点的统一的行为接口,让client端可以对他们一视同仁,简化操作。
何时使用
- 需求中是体现部分和整体层次结构时;
- 希望用户可以忽略组合对象与单个对象的不同,统一使用组合结构中的所有对象时;
- 想要分发什么东西到对象时。
优点
- 基本对象可悲组合为更复杂的组合对象,用到基本对象的地方都可以使用组合对象;
- 用户不用关心到底是处理叶节点还是一个组合组件,也不用为定义组合而写一些判断语句。即客户可以一致地使用组合结构和单个对象。
...
04 Mar 2019
命令模式
优点
何时使用
- 当需要将执行命令的client与命令逻辑及其依赖项解耦时,请求操作的对象(invoker)与知道具体如何操作的对象(command & receiver )分割开;
- 设计命令行工具;
- 真正需要实现命令的验证、撤销和恢复时。
相关模式
- 工厂模式,常用来结合到命令模式中,生产命令实例;
- 组合模式(执行一个命令,其所有子命令全部执行)。
...
04 Mar 2019
责任链模式
何时使用
- 对于一条message有超过一个handler可以处理它
- 发送message的sender一开始并不能明确得知最终合适的handler
- handler的集合可以被动态地定义(node handler用起来可以按需连接)
责任链优点
- 减少耦合
- 动态地管理 message handlers
- 责任链的末尾可以适当的自定义
与其有关的模式
- Composite组合模式
- 责任树模式(也就是字面意思)
...
04 Mar 2019
建造者模式
为了构造很复杂的对象,把logic从data中分离出来,以便能够重用logic。
这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。
做三明治的步骤顺序一般固定,但是每一步骤都可以有很多种变换。
- Director负责组织Concrete Builder的product构造逻辑顺序 (logic);
- Builder (abstract interface) 负责定义product的每一步抽象逻辑;
- Concrete Builder定义product的每一步具体逻辑;
...