行为模式研究的是类或对象之间的合作和任务分工,描述的是对象间的交互,是不同对象之间划分责任和算法的抽象化。重点关注它们之间的交互和通信。行为模式更加清晰地划分类与对象的职责,并研究系统在运行时实例对象之间的交互。
模板方法(template method)
在基类中确定算法结构,在子类中实现可变化的部分,具有统一的操作步骤或操作过程,有不同的操作细节。使用继承计指使得父类和子类之间达到分工合作的目的。提取了子类的公共行为,高度的复用性,符合依赖倒置原则
命令模式(command)
把一个“命令”封装在一个对象中,命令对调用者透明。(点击录制按钮即可开始录制本局比赛)
命令的生成和执行在时间上没有关联,可以异步进行,调用者的实现可以不依赖于系统的其他部分,命令对象可以复用。可用于对请求排队或记录请求日志,支持取消操作。调用命令时产生额外开销,用于分布式系统时相当复杂。
观察者模式(observer)
当一个对象的状态发生变化时,通知所有依赖它的对象,从而实现自动更新。建立了被观察者对象和观察者对象之间一对多的关系。被观察者只需提供一个观察者接口而不需了解观察者的实现,新的观察者可随时加入,双方互不依赖地复用。向观察者发送消息需要消耗额外时间,无条件发生更新消息,可能导致状态更新的无限循环。
策略模式(strategy)
策略模式允许对封装的全部算法进行替换,把所有可用的策略通过统一的接口进行抽象化,并把每一个策略封装在一个对象中。可以根据环境灵活运用适应的解决策略,环境类只依赖于策略接口而不依赖于具体的实现(依赖倒置),易于复用,运行时可替换。应用必须知道一个环境对象下的多个不同策略,并清楚在什么情况下使用何种策略,耗费较高的通信资源。
中间者模式(mediator)
通过中心位置的中间者控制多个对象间的协调工作,提高对象的复用性和系统整体对外的清晰性。对象间的n:m关系被简化为中间者对多个对象的1:n关系。中间者和同事的类的层次结构必须遵守里氏代换原则。同事间的通信通过中间者完成。同事对象之间是松耦合,同事对象是可复用的,管理集中化,减少子类的创建,不需要考虑通信另一方的适应问题。中间者结构复杂,需要容错措施。
状态模式(state)
针对不同的状态在对应的一个类的对象中构造典型的判断条件。每个具体的状态类负责一个环境对象在这个状态下的行为。状态以类的形式实现,可以对每一个依赖于状态的行为进行说明,存在可扩展性,但从效费比来看意义不大
访问者模式(visitor)
访问者模式把一个操作上的思路完全封装在一个独立的访问者对象中,可以统一使用一个对象结构的所有对象中的数据,在不改变对象本身的情况下添加新的操作。加入新功能容易,插入新元素难,集中了操作的代码,时候应用代价高,系统开销大,弱化了私有数据的封装
迭代器模式(iterator)
可以按照不同的遍历策略遍历一个数据结构,分离了遍历的机制和要遍历的数据结构。数据结构的构造对客户透明,多个迭代器可同时遍历一个数据结构。必须由具体数据结构对象生成与自身相适应的迭代器,外部迭代器在遍历过程中容易受到数据结构变化的影响。
职责链模式(COR)
避免请求发送者和接收者之间的耦合关系,多个对象都有机会处理一个请求,对象连成一条链,请求沿链传递,直到有对象处理。增强了给对象分配职责的灵活性,不保证请求被接受