c++之观察者模式
发布日期:2021-09-25 21:40:51 浏览次数:10 分类:技术文章

本文共 1523 字,大约阅读时间需要 5 分钟。

观察者模式属于行为型模式,即当对象间存在一对多关系时,则考虑使用观察者模式。比如,当一个对象被修改时,则会自动通知依赖它的对象。

栗子场景:课堂上,李老师(具体通知者)叫小明(具体观察者)和大红(具体观察者)坐下,然后再单独叫小明站起来。

代码:

#include 
#include
using namespace std;//抽象观察者class Observer{public: virtual void update(std::string) = 0;};//具体观察者小明class ConcreateObserverXiaoMing :public Observer{public: virtual void update(std::string s) { cout << "XiaoMing"<< s.c_str() << endl; }};//具体观察者大红class ConcreateObserverDaHong :public Observer{public: virtual void update(std::string s) { cout << "DaHong " << s.c_str() << endl; }};//抽象通知者class Subject{public: virtual void Attach(Observer *ob) = 0; virtual void Detach(Observer *ob) = 0; virtual void Notify() = 0;};//具体通知者 李老师class ConcreateSubjectLiLaoshi :public Subject{public: //增加观察者 virtual void Attach(Observer *ob) { if (ob != nullptr) { m_observer.push_back(ob); } } //移除观察者 virtual void Detach(Observer *ob) { if (ob != nullptr) { m_observer.remove(ob); } } //通知 virtual void Notify() { //list
::iterator iter = m_observer.begin(); auto iter = m_observer.begin(); for (; iter != m_observer.end(); iter++) { (*iter)->update(m_staus); } } void setStatus(std::string s) { m_staus = s; }private: list
m_observer; std::string m_staus;};int main(){ ConcreateSubjectLiLaoshi conSub; ConcreateObserverXiaoMing xiaoMing; ConcreateObserverDaHong daHong; conSub.Attach(&xiaoMing); conSub.Attach(&daHong); conSub.setStatus("坐下"); conSub.Notify(); conSub.Detach(&daHong); conSub.setStatus("站起来"); conSub.Notify(); return 0;}

 

转载地址:https://blog.csdn.net/c_shell_python/article/details/107344010 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:c++之单例模式
下一篇:面向对象设计的七大原则

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月06日 19时30分07秒