文章目录
- 第五章 行为型模式
- 1. Chain of Responsibility(责任链) -- 对象行为型模式
- 2. Command(命令) -- 对象行为型模式
- 3. Interpreter(解释器) -- 类行为型模式
- 4. Iterator(迭代器) -- 对象行为型模式
- 5. Mediator(中介者) -- 对象行为型模式
- 6. Memento(备忘录) --- 对象行为型模式
- 7. 观察者模式---对象行为模式
- 8. State(状态)---对象行为模式
- 9. Strategy(策略)模式 ---对象行为模式
- 10. Template Method(模板方法)---类行为模式
- 11. Visitor(访问者)--0对象行为型模式
第五章 行为型模式
1. Chain of Responsibility(责任链) – 对象行为型模式
- 意图:
- 十多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系;
- 使用;
- 从第一个对象开始,链中收到求的对象要么亲自处理,要么转发下一位候选者,知道请求被处理或者到链的终点未处理;
2. Command(命令) – 对象行为型模式
- 意图:
- 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作;
- 别名:
- 动作(action),事务(transaction);
- 回调函数:
- 所谓的回调函数是指函数先在某处注册,而他将在稍后某个需要的时候被调用;
- 适用性:
- 在不同的时刻指定,排列和执行请求;
- 支持取消操作,增加反向操作接口即可;
- 支持修改日志,todo undo;
- 用构建在源语上的高层操作构造一个系统;
3. Interpreter(解释器) – 类行为型模式
- 意图:
- 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子;
- 适用性:
- 解释一个语言,可以将语言中的句子表示为一个抽象的语法树时可以使用解释器模式;
4. Iterator(迭代器) – 对象行为型模式
- 意图:
- 提供一种方法舒徐访问一个聚合对象中各个元素,而又不需要暴露该对象的内部表示;
- 别名:
- 游标;
- 效果:
- 支持以不同的方式表里一个聚合;
- 简化了聚合的接口;
- 在同一个聚合上可以有多个遍历,每个迭代器保持它自己的遍历状态;
5. Mediator(中介者) – 对象行为型模式
- 意图:
- 用一个中介对象来封装一系列的对象交互;
- 中介者使个对象不需要显式的相互引用,从而使其松耦合且交互独立;
- 和外观模式的区别:
- 外观模式对一个对象子系统进行抽象,从而提供了一个更为方便的接口;
- 外观模式的协议时当乡的,向子系统类提出请求,反之不行;
- 中介者模式提供了元对象不支持或者不能支持的协作行为,而且协议时多向的;
6. Memento(备忘录) — 对象行为型模式
- 意图:
- 在不破坏封装性的前提下,捕获一个对象的内部状态,并在这个对象之外保存这个状态,以备未来恢复;
- 别名:
- Token
- 动机:
- 一个备忘录是一个对象,他存储另一个对象在某个瞬间的状态,后者成为备忘录的的原发器(originator);
- 需要设置原发器的检查点时,取消操作机制会向原发器请求一个备忘录,原发器用描述当前状态的信息初始化该备忘录;
- 只有原发器可以向备忘录中存取信息,备忘录对其他的对象不可见;
- 适用性:
- 必须保存一个对象在某个时刻的(部分)状态,以备恢复;
- 避免对象的内部细节被暴露;
- 效果:
- 保持了封装边界;
- 简化了原发器;
- 使用备忘录可能代价很高;
- 定义窄接口和宽接口;
- 维护备忘录的潜在代价:历史记录的管理问题;
7. 观察者模式—对象行为模式
- 意图:
- 定义独享间的一对多关系,一个对象的状态发生改变,所有依赖其的对象都得到通知;
- 别名:
- 依赖(dependent),发布-订阅(publish-subscribe)
- 适用性:
- 抽象模型的连个方面,存在单方面依赖,拆分以保证各自独立的改变复用;
- 一对多的关系,多为动态改变;
- 解耦强关联关系;
- 协作:
- 主动拉取式;
- 被动推送式;
- 效果:
- 目标和观察者之间的抽象耦合;
- 支持广播通信;
- 意外的更新;
8. State(状态)—对象行为模式
- 意图:
- 允许一个对象在其内部状态改变时改变他的行为;
- 别名:
- 状态对象(object for state);
- 适用性:
- 一个对象的行为取决于他的状态,并且必须在运行时根据状态改变行为;
- 一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态;
- 效果:
- 将于特定状态相关的行为局部化,并且将不同状态的行为分割开来;
- 使得状态转换显式化;
9. Strategy(策略)模式 —对象行为模式
- 意图:
- 定义一系列算法,把他们一个个封装起来,并且使他们可相互替换;
- 使得算法可以独立于客户发生变化;
- 别名:
- policy
- 协作:
- Java Comparator接口;
10. Template Method(模板方法)—类行为模式
- 意图:
- 定义一个操作的骨架,而将一些步骤延迟到子类中;
- 子类可以不改变一个算法的结构及可重新定义该算法的默写特别步骤;
- 适用性:
- 一次性实现一个算法的不变部分,并将可变的行为留给子类实现;
- 子类的公共行为提取出来提高复用性;
- 控制子类扩展;
- 效果:
- 模板方法是一种代码复用的基本技术;
- 钩子操作:可以被重定义的操作;
11. Visitor(访问者)–0对象行为型模式
- 意图:
- 表示一个作用于某对象结构中的各元素的操作;
- 不改变元素的类的前提下定于作用于这些元素的新操作;