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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2024年04月06日 19时30分07秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Unity编辑器扩展——标签属性Attribute
2021-06-30
Unity中实现拖拽操作
2021-06-30
Unity中的UGUI事件系统
2021-06-30
C#中的常量
2021-06-30
C#中的静态变量与非静态变量
2021-06-30
C#中的ref、out、params关键字
2021-06-30
C#中的多态性
2021-06-30
C#中的命名空间
2021-06-30
设计模式——状态模式
2021-06-30
设计模式——工厂模式
2021-06-30
Unity中实现有限状态机FSM
2021-06-30
Unity中实现反弹
2021-06-30
U3D游戏开发框架(九)——事件序列
2021-06-30
Unity中解决“SetDestination“ can only be called on an active agent that has been placed on a NavMesh
2021-06-30
Unity中的刚体
2021-06-30
Unity中的坐标转换
2021-06-30
Unity中为什么不能对transform.position.x直接赋值?
2021-06-30
Unity中物体移动方法详解
2021-06-30
使用对象池优化性能
2021-06-30