观察者模式--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();     //通知观察者
}

  

posted @ 2017-09-04 16:52  宁静淡泊  阅读(124)  评论(0编辑  收藏  举报