行为模式

1、职责链(Chain of responsibility)

将请求发送给接受者,接受者要么处理请求,要么转发给链表中的下一个候选者,提交请求并不知道哪个对象会处理这个请求。

适用情况:有多个对象可以处理一个情况,哪个对象处理在运行时自动确定。不想明确接收者的情况下,向多个对象中的一个提交一个请求。

如windows中的消息处理,QT中的风格设置。


2、命令(Command)

将一个请求封装成对象,从而使你可用不同的请求对客户进行参数化

class Command

{

public:

    virtual ~Command();

    virtual void Excute() = 0;

}

class OpenCommand: public command

{

public:

OpenCommand(Application *);

virtual void Excute();

}


3、解释器

没看懂


4、迭代器(Iterator)

提供一种方法顺序访问一个聚合对象的各个元素,应用较多,可参考STL


5、中介者(Mediator)

可以访问系统中的各个类。尽量不要用吧。


6、备忘录(Memento)

在不破坏封装的前提下,捕获一个对象的内部状态。并在该对象外保存这个状态。

适用性:

6.1 必须保存一个对象在某一时刻的状态

6.2 如果用接口让对象直接得到这些状态,会暴露实现细节并破坏封装性


7、观察者

用的太频繁了。也可以显示的指定感兴趣的改变。



8、状态(State)

允许一个对象在内部状态改变时改变它的行为。

适用性:一个对象的行为取决于它的状态,在运行时根据状态改变它的行为。

例子中有个想法还可以。如下形式:

行为模式_第1张图片

当Request发生时,调用state的状态改变接口,然后Handle中,会将State从concreateStateA改变为B,即状态发生变化了,行为的变化


9、策略(strategy)

定义一系列的算法,把它们封装起来,并且它们可以互相替换,使算法可以独立于使用它的客户而变化。

行为模式_第2张图片


10、模板方法

这个名字取的不太合适,其实和template没有任何关系

定义一个操作中的算法的股价,而将一些操作延迟到子类中。

void View::Display() // 外部调用该接口

{

setFocus();

doDisplay(); // 子类实现

RefreshFocus();

}

保证了执行顺序,减少了重复代码


11、访问者(Vistor)

你可能感兴趣的:(行为模式)