设计模式(行为型)

138 阅读3分钟

行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

1.策略模式

定义了一系列算法,并将每一个算法封装起来,而且使它们可以相互替换。

让算法独立于使用它的客户独立变化。

定义抽象,注入不同的实现。

比如一个播放列表的不同播放次序,顺序播放,随机播放,单曲循环等。

2.状态模式

不同状态下对于同一行为有不同的响应。

比如登录、未登录两种状态下,对于评论操作的不同响应。

状态接口包含各种状态的共有操作,具体状态实现这些操作(每种状态下用一个操作的行为不一样,多态)

拥有状态的对象维护一个状态的实例,把行为转发给这个状态去响应。

3.责任链模式

使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,只到有对象处理它为止。

抽象处理类持有下一个节点上的处理者对象,负责转发处理责任。

如:触摸事件处理机制

4.解释器模式(*)

5.命令模式

将行为调用者与实现者解耦。

Client(Player)--Invoker(Buttons)--Command(Left、Right etc.)--Receiver(执行)

6.观察者模式

Observer向Observable对象进行注册,Observable对象发生变动时通知所有注册的Observer。

如EventBus。

7.备忘录模式

将一个对象的内部状态,保存到外部,以后需要时可以恢复到原先保存的状态。

Originator:要保存、恢复自身状态的类,负责创建备忘录。

Memento:备忘录类,存储Originator的内部状态,并且可以防止Originator以外的对象访问Memento。

Caretaker:负责存储备忘录。

如游戏存档,文档的历史记录功能。

8.迭代器模式

提供一种方法顺序访问一个容器对象中的各个元素,而又不需要暴露改对象的内部表示。

用迭代器类实现对容器类的遍历操作,弱化了容器类与遍历算法之间的关系。

9.模板方法

封装流程,把摸个固定的流程封装到一个final函数中,并且让子类能够定制这个流程中的某些或者所有步骤。

如AsyncTask、Activity的生命周期函数。

10.访问者模式

封装一些作用于某种数据结构中的各元素的操作,它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作。

被访问的类结构比较固定,可以通过组合该类的方法形成不同的访问。

比如人事部门和用人部门对同一个员工有不同的评价侧重点,员工提供各种数据资料的方法供查看,人事部门和用人部门可以根据自己的评价侧重点调用不同的员工方法对员工信息进行访问。

11.中介者模式

将对象之间的多对多关系变成一对多关系。

如CPU、GPU、声卡等组件通过主板进行通信。主板就是中介者。

再比如Acitivity,就是界面上各个UI组件的中介者,协调UI组件间的调用关系。