观察者模式--11种行为模式之一。

Posted 宁静淡泊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了观察者模式--11种行为模式之一。相关的知识,希望对你有一定的参考价值。

主要思想:

  1个目标可以有多个观察者,

  当目标更新后,目标主动通知观察者,

  不同的观察者通过回调函数完成多态。

/*
观察者模式示例
*/
# include <iostream>
# include <list>

using namespace std;

//目标声明,观察者中用
class BaseSubject;

//抽象的观察者
class AbsObserver {
public:
        //更新目标,会传递目标指针,使观察者可以操作目标
        virtual void update(BaseSubject *obj) = 0;
};

//目标基类
class BaseSubject {
public:
        //添加观察者
        virtual void addObserver(AbsObserver *obs) {
                observers.push_back(obs);
        }
        //删除观察者
        virtual void delObserver(AbsObserver *obs) {
                observers.remove(obs);
        }
        //通知观察者
        virtual void notifyObserver() {
                for (list<AbsObserver *>::iterator ite = observers.begin(); ite != observers.end(); ++ite) {
                        (*ite)->update(this);
                }
        }
private:
        list<AbsObserver *> observers;
};

//具体的观察者1
class Observer1 : public AbsObserver {
public:
        virtual void update(BaseSubject *obj) {
                cout << "观察者1收到通知并进行操作" << endl;
        }
};

//具体的观察者2
class Observer2 : public AbsObserver {
public:
        virtual void update(BaseSubject *obj) {
                cout << "观察者2收到通知并进行操作" << endl;
        }
};


//目标派生类
class DeriveSubject : public BaseSubject {
public:
        DeriveSubject() {
                cout << "构造目标" << endl;
        }
};

int main()
{
        Observer1 obs1;         //构造观察者1
        Observer2 obs2;         //构造观察者2
        DeriveSubject a;        //构造目标
        a.addObserver(&obs1);   //添加观察者1
        a.addObserver(&obs2);   //添加观察者2
        a.notifyObserver();     //通知观察者
}

  

以上是关于观察者模式--11种行为模式之一。的主要内容,如果未能解决你的问题,请参考以下文章

Java开发中的23种设计模式详解之三:11种行为型模式

设计模式 行为型模式 -- 观察者模式(发布-订阅(Publish/Subscribe)模式)

21行为型模式之观察者模式

行为型模式之观察者模式

Java设计模式之十一种行为型模式(附实例和详解)

设计模式行为型模式