码迷,mamicode.com
首页 > 其他好文 > 详细

观察者模式

时间:2016-10-27 19:05:39      阅读:253      评论:0      收藏:0      [点我收藏+]

标签:date()   private   ++   模式   观察者模式   rtu   r++   iostream   str   

#include <iostream>
#include <string>
#include <vector>
#include <map>

using namespace std;

class Observer
{
public:
    virtual void update() = 0;
};

typedef vector<Observer*> VEC_OBS;

class Subject
{
private:
    VEC_OBS mObs;
public:
    void addObserver(Observer * obs)
    {
        this->mObs.push_back(obs);
    }
    void delObserver(Observer * obs)
    {

    }
    void notifyObserver()
    {
        VEC_OBS::iterator iter = mObs.begin();
        for(iter=mObs.begin(); iter!= mObs.end(); iter++)
        {
            Observer * pObs = *iter;
            pObs->update();
        }
    }
    virtual void doSomething() = 0;
};

class ConSubject1 : public Subject
{
public:
    void doSomething()
    {
        cout<<"被观察者事件发生"<<endl;
        this->notifyObserver();
    }
};

class Observer1: public Observer
{
public:
    void update()
    {
        cout<<"观察者1收到消息"<<endl;
    }
};

class Observer2: public Observer
{
public:
    void update()
    {
        cout<<"观察者2收到消息"<<endl;
    }
};

void main()
{
    Subject * pSub = new ConSubject1();
    pSub->addObserver(new Observer1());
    pSub->addObserver(new Observer2());
    pSub->doSomething();
}

观察者模式

标签:date()   private   ++   模式   观察者模式   rtu   r++   iostream   str   

原文地址:http://www.cnblogs.com/taotaoju/p/6004899.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!