Welcome

首页 / 软件开发 / C++ / 设计模式之观察者模式与其C++通用实现(上)

设计模式之观察者模式与其C++通用实现(上)2010-09-14 CSDN博客 林石观察者模式

意图:

定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

结构:

优点:

目标(Subject)与观察者(Observer)间抽象耦合

支持广播通信/通知

缺点:

会带来意外更新问题

示例:

考虑这样一个例子:想知道公司最新的MM情报吗?加入我们MM情报邮件组吧。您只需要向我们发送一封订阅邮件即可,我们会把最新的MM情报以电子邮件形式通知您。

现在我们来一步一步实现。很明显,示例中关心MM情况的人物即为订阅者,我们以Subscriber表示这一类人。在定义Subscriber之前我们先定义一个MMStatus枚举,用以表示MM状态:

1.enum MMStatus {Dining, Sleeping, Working};

这里定义了三个常量用以简单地模拟MM所处的状态。现在我们可以定义Subscriber类了:

1.struct Subscriber
2.{
3.virtual void action(MMStatus status) = 0;
4.virtual ~Subscriber() {}
5.};