设计模式_观察者模式
程序员文章站
2022-03-30 22:58: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;
};
//具体的订阅者reader
class 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;
};
//具体的订阅者fans
class 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;
};
#endif
int 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;
}
运行结果:
上一篇: Java学习笔记(三)
下一篇: 设计模式_状态模式