GoF - 行为模式
2021-11-24 本文已影响0人
_Walker__
责任链模式(Chain Of Responsiblity)
对象结构使多个对象都有机会处理请求,从而避免请求的发送者和接受者间的耦合关系。
将处理请求的对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
责任链中,从第一个对象开始,链中收到请求的对象要买自己处理它,要么转发给链中的下一个对象。
- 责任链是在运行时动态建立的,因此灵活性较强
- 责任链并不保证每个请求都能被处理
- 在责任链中,最多只有一个对象负责处理请求
中介者模式(Mediator)
用一个中间对象封装一系列的对象交互。
中介者使各对象不需要显示的相互引用,从而使其低耦合,而且可以独立的改变它们之间的交互。
应用场景
- 一组对象饴定义良好但是复杂的方式进行通信。产生的相互依赖关系混乱且难以理解
- 一个对象引用了很多其他对象,并且直接与这些对象通信,导致难以复用该对象
- 想定制一个分布在多个类中的行为,而又不想生成太多的子类
特点
- 减少子类生成,Mediator使得Colleague类可以被复用,减少了Colleague创建子类拓展业务的可能
- 控制集中化,Mediator将对象交互的复杂性,变为中介者的复杂性。这可能导致中介者本身成为一个难以维护的对象。
- Mediator与MVC中的C有着相同的职责
备忘录模式(Memento)
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
应用场景
- 必须保存对象在某一时刻的状态,以便后面将其恢复到原先的状态
- 用接口让其他对象获得自身状态,会暴露对象的实现细节并破坏封装性
特点
- Memento的合理实现,很依赖语言的特性支持。Memento中状态的存取只应对原类对象完全开放,其他类不应获得访问权限。C++的友元、C#的内部类都提供了有效的支持。
访问者模式(Visitor)
Visitor表示 一个 作用于某对象结构中各元素的操作。
它使你可以在不改变各元素的类的前提下,定义作用于这些元素的新操作。
应用场景
- 对象结构很少改变,但经常需要在此结构上增加新的操作
- 需要对一个对象结构的成员对象,进行很多不同且不相关操作(这里不相关是指多个操作间不相关,但每个成员对象都有相同的操作),又不想这些操作污染成员对象的类。Visitor将每一组相关的操作集中放在一个类中。
特点
- 一个具体的Visitor类,定义一个操作
- 每个Element都要知道Visitor的存在(但只需要简单的执行Visitor的Visit方法)。这一特点意味着, 在最初没有给Visitor预留接口的设计中,不适合用Visitor来拓展操作。