设计模式之行为模式

来源:互联网 发布:dnf for mac 编辑:程序博客网 时间:2024/04/30 01:58

行为模式是对不同的对象之间,划分其责任和算法。

分类:类结构模式或对象结构模式

包含下列模式:

1)不变模式

2)策略模式

3)模板方法模式

4)观察者模式

5)迭代子模式

6)责任链模式

7)命令模式

8)备忘录模式

9)状态模式

10)访问者模式

11)解释器模式

12)调停者模式


 

一、不变模式

例子:Java里String,Integer, Float等各种封装类

分为:

1)弱不变模式: 子类可能有变化。

2)强不变模式: 子类业务变化或根本不能有子类。

注意:

1)不变模式不是无状态,它可以有状态,只不过状态不变而已。

2)不同于只读属性。例如年龄,即使设置了只读属性,随着时间的变化,其年龄属性也发生变化。

使用方法:

直接在构造的时候,确定状态值,并不允许以后再修改状态。


二、策略模式

例子:以前做的台球算账程序,图书折扣,诸葛亮的锦囊妙计(3个锦囊,3个计策)

目的是封装一组算法,每一个算法是一个具体的策略类。

使用的时候由客户端来决定具体使用哪一个策略类。


三、模板方法模式

例子:好莱坞原则,西天取经八十一难(这81磨难是设计好不能少的,唐僧是具体模板,经历了西游记的81难,换成我去取经也是要经历81难的,第一难,第二难。。。。第81难)

准备一个抽象类,将顶级的逻辑完成,然后声明一些抽象方法来迫使子类来实现其余的逻辑。(这些抽象方法已被抽象类的顶级逻辑所调用)

不同的子类以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。


四、观察者模式

例子:发布-订阅,awt的Listener。

校色有两类,一个是主题,一个是观察者对象,它们是1:N的关系。

当主题的状态发生变化时,可以通知所有的观察者对象。 (调用观察者对象类似Update()的方法)


五、迭代子模式

目的:该模式将迭代逻辑(正序遍历,反序遍历,增加,删除)与聚集本身分开。(聚集是采用vector还是list,都不影响迭代)。

该模式可采用内部类的方式,限制其他类对聚集类索引的访问。(只对迭代类公开)


六、责任链模式

例子:传花击鼓, AWT事件处理,java城堡竞赛

很对对象由每一个对象对其下家的引用而连接起来形成一个链条。

关键点:基类有类似的三个函数

1)是否满足

2)满足执行的一些action

3)取得下家(不满足时)


七、命令模式

重点的对象是命令(抽象对象和具体对象)

简单来说,这个模式是在请求者和接受者之间建立一个command角色,  类似于c的callbcack。

例子:太上老君请猴王上天。 请求者太上老君,接受者猴王,命令是执行的圣旨。

上帝造万物。 抽象命令角色只需要一个借口函数execute(), 具体命令角色:造天command, 造地command, 造人command等。













原创粉丝点击