简介:
1 Template Method是一个算法的抽象定义,逐步定义该算法。,每步调用一个抽象操作或一个原语操作。子类实现算法
2 Interpreter:将一个文法作为一个类层次,实现一个解释器作为这些类的实力上的一个操作
3 Mediator 将对象间的交互,由多对多变为一对多,同时对象间松耦合
4 责任链提供更松的耦合。通过一条候选对象链隐式的向一个对象发送请求。
5 Observer模式定义并保持对象间的依赖关系
6 Strategy将算法封装到对象中,方便指定和改变一个对象所使用的算法
7 Command将一个请求封装在对象中,可以作为参数,或者存储在历史列表
8 State是将一个对象的状态封装,当状态变化时可改变行为
9 Visitor封装分布于多个类之间的行为
10 Iterator:抽象了访问和遍历一个集合中的对象的方式
11 Memento
行为模式讨论:
1 封装变化:
当一个程序的某些方面的特征经常变化时,这些模式就定义封装这个方面的对象
当程序其他方面依赖于这个方面时,都可以与此对象协作。
这些 模式通常定义一个抽象类来描述这些封装变化的对象,根绝该模式依据这个对象命名。
.Strategy封装一个算法
.State封装一个与状态相关的行为
.Mediator封装对象间的协议
.Iterator对象封装访问和遍历一个狙击对象中的各个构建的方法。
封装该方面特征的对象 和 使用这些新对象的已有对象。否则,会变成已有对象难以分割的一部分。
2 对象作为参数:
Visitor对象是一个多台的Accept的参数,这个操作作用于visitor访问的对象。
作为令牌到处传递的对象:Command和Memento,前者代表一个请求,后者代表某个对象在特定时刻的内部状态。
Command的多态很重要,执行Command是一个多态的操作。Memento接口非常小,备忘录只能作为一个值传递。不能给客户提供多态操作。
3 通信应该被封装还是被分布:
Observer和Mediator是竞争的模式。
Observer通过引入Observer和Subject来分布通信。Mediator则封装成了其他对象间的通信。
不存在封装一个约束的单个对象,必须由Observer和Subject相互协作来维护这个约束。
C++Mediator更好用
4 对发送者和接收者解耦:
Command对象定义一个发送者和接收者之间的绑定关系
Observer将Observer与Subject解耦,Subject更新接口Update通知Observer
Mediator:将各个Colleague的相互引用解耦,各个Colleague只能通过Mediator交谈。
职责链:通过沿着一个潜在的接收者链来产地请求,将发送者与接收者解耦
Mediator和职责链 都要有分发策略,会影响类型安全。
5总结:
除了少数模式,各个模式之间是相互补充的和加强的关系。一个职责链至少包含一个Template Method模式的应用。
模板方法可用原语操作确定对象是否应该处理该请求并选择应转发的对象
职责链可以使用Command模式将请求表示为对象。
Interpreter使用State模式定义语法分析树上下文
迭代器遍历一个聚合
visitor对它的每一个元素进行操作