Behavioral Patterns 行为模式总结
一、总体概念
Behavioral Patterns | |
Chain of Resp. | A way of passing a request between a chain of objects |
Command | Encapsulate a command request as an object |
Interpreter | A way to include language elements in a program |
Iterator | Sequentially access the elements of a collection |
Mediator | Defines simplified communication between classes |
Memento | Capture and restore an object's internal state |
Observer | A way of notifying change to a number of classes |
State | Alter an object's behavior when its state changes |
Strategy | Encapsulates an algorithm inside a class |
Template Method | Defer the exact steps of an algorithm to a subclass |
Visitor | Defines a new operation to a class without change |
二、分类
根据其特性分成了三类:
1、将sender和receiver解藕的4种模式:
command模式:将调用某个命令的对象和执行命令的对象decouple,调用命令的对象完全不知道执行命令的对象以及执行的具体方式,只知道执行的接口(通过command的抽象 类的接口)。可以在运行时,改变调用的命令,只需要使用不同的命令对象
observer模式:又叫做publish-subscribe。在这个模式中,有多个observer(subscriber订阅者)订阅了某一个对象。也就是说,当这个对象发生改变时,要通知到所有 observer,维护observer数据的一致性。这个模式的好处时,可以随时增加或者删除observer(订阅者)。
mediator模式:所有对象之间的交互都要通过mediator来进行,各个对象之间不需要知道对方,只需要知道mediator。
chain of responsibility: 将命令的sender和receiver进行decouple,使得request沿着sender一直传到receiver
2、封装:
找出变化并封装之。找出一些对象的不同之处,把这些不同之处作为抽象类的虚函数,也就是接口。如抽象类为A,实际类为A1和A2
优先使用对象聚集,而不是类继承。使用聚集来使用这些对象。如果B要使用A,则把A的一个指针作为其类成员,然后调用A的接口。这样,B在实现中不需要知道A调用的虚函数的方法到底是哪个,这是由运行时A的实际对象类型来决定的。
strategy模式:把各种不同的算法作为A
state模式:把各种不同的状态作为A
3、其他:
visitor:一个结构(一般是composite结构)中,每个子类都有针对这种子类的一系列操作,而这些操作经常发生变化,则需要整个类层次中的操作(函数)都发生改变。在这种 情况下,要使用visitor模式,使每一种操作都作为一个单独的类
template method:一种算法的步骤固定,但其中一些步骤实现决定于具体的子类。
memento:需要保存一个对象的状态,但又不希望暴露其接口,用memento对象来存储其状态,并在适当时候恢复其状态
iterator:遍历一个结构(composite结构)
interpreter:解析一种语言结构