行为型模式总共有11种:职责链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。
封装变化
封装变化是很多行为模式的主题。当一个系统里面某些特性经常发生变化的时候,我们常常可以使用一个相应的行为模式来封装。所以,行为型模式里面很多模式都会具有两种对象:
1. 封装特征的对象;
2. 使用这些特征的对象。
如果不使用这些特征对象,那么这些特征对象很可能会被嵌入到它的Context类中,从而使得很高的耦合性,违法了高内聚低耦合的原则。比如策略模式中的策略对象往往会变成context的一部分,这不是我们想要的结果。
几个封装变化的模式:
1. 策略模式的策略封装了“变化的算法”;
2. 状态模式的状态封装了“变化的状态”;
3. 中介者模式的中介封装了一些对象间通信的协议;
通信应该是被封装还是被分布
中介者模式和观察者模式好像是相反的。
观察者模式引入了Observer和Subject来分布通信,相反,中介者对象又想封装其他对象间的通信(比如中介者对象可以封装Observer和Subject之间的通信)。一眼看去感觉是矛盾的啊。个人比较喜欢使用观察者模式,特殊是涉及UI界面的时候。但是中介者的一个典型应用也是UI方面的,可以将各个子控件之间的通信通过中介者封装起来。由于本人能力有限,不能深度体会这两种模式之间的区别。有待提高。
多种模式交叉使用
往往,我们在设计一个系统的时候,多种设计模式会被交叉使用。比如
1. 模板方法模式有很大的概率出现在其他模式的抽象类中。
2. 职责链模式中的对象的操作可以使用访问者模式来扩展。
3. 命令模式中的运行状态保存可以使用备忘录模式。
还有很多其他交叉使用的例子。
模式区别
行为型模式、结构型模式和创建型模式,各有各的关注点。
行为模式主要关注的是封装系统中一些特征的变化;
结构模式关心如何管理各个类之间的关系和如何扩展,从而使得类库里面各个类之间有一个比较好的结构;
创建模式讲究如何比较有效率的来创建一些对象。
有些时候,它们的类结构看上去很像,但是意图完全不同。区分设计模式,意图是很重要的一点。比如状态模式和策略模式,类结构一模一样,但是意图完全不一样。