设计模式_观察者模式

来源:互联网 发布:家电销售数据 编辑:程序博客网 时间:2024/05/22 16:04

观察者模式

观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为型模式的一种,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。

类图:

可执行代码:

#ifndef _OBSERVER_H_#define _OBSERVER_H_#include<iostream>#include<vector>using namespace std;class XObserver;//主题,抽象的被观察者class XSubject{public:    virtual void addObserver(XObserver* observer)=0;    //通知所有的订阅者    virtual void notify()=0;    void setStatus(bool status) { mbStatus = status; }    bool getStatus() { return mbStatus; }private:    bool mbStatus;};//订阅者,抽象观察者class XObserver{public:    //更新各自的状态或者完成一些操作    virtual void update() = 0;};//具体的订阅者readerclass Reader: public XObserver{public:    Reader(XSubject* sub ):mpSub(sub) {}    void update() override    {        if(mpSub->getStatus())            cout<< "dear reader,your new subject is ready" << endl;    }private:    XSubject * mpSub;};//具体的订阅者fansclass Fans : public XObserver{public:    Fans(XSubject * sub):mpSub(sub) {}    void update() override    {        if(mpSub->getStatus())            cout << "dear fans,your new subject is ready" << endl;    }private:    XSubject * mpSub;};//具体的主题class Subject: public XSubject{public:    void addObserver(XObserver* observer) override    {        observers.push_back(observer);    }    void notify() override    {        for (vector<XObserver*>::const_iterator it = observers.begin(); it != observers.end(); ++it)            (*it)->update();    }private:    //保存所有的订阅者    vector<XObserver*> observers;};#endifint main(){    XSubject* sub = new Subject();    XObserver * reader = new Reader(sub);    XObserver * fans = new Fans(sub);    sub->addObserver(reader);    sub->addObserver(fans);    //主题状态更新,然后通知所有的订阅者    sub->setStatus(true);    sub->notify();    return 0;}

运行结果: