c++实现观察者模式
1、构建被观察者基类
class IObserver { public: virtual void ReceiveMsg(std::string msg) = 0; private: };
2、构建被观察者1
class Student: public IObserver { public: void ReceiveMsg(std::string msg) override { std::cout <<"学生知道了,终于"<<msg<< std::endl; } private: };
3、构建被观察者2
class Teacher :public IObserver { public: void ReceiveMsg(std::string msg) override { std::cout << "老师知道了,终于" << msg << std::endl; } private: };
4、构建观察者(消息管理者)
class Radio { private: std::vector<IObserver *> m_Listener; public: void Register(IObserver * observer) { m_Listener.push_back(observer); } void UnRegister(IObserver* observer) { auto it = std::find(m_Listener.begin(), m_Listener.end(), observer); if (it != m_Listener.end()) { m_Listener.erase(it); } } void Broadcast(std::string msg) { if (m_Listener.size() == 0) return; for ( auto listener: m_Listener){ listener->ReceiveMsg(msg); } } private: };
5、调用
int main() { auto ob1 = new Student(); auto ob2 = new Teacher(); auto audio = new Radio(); audio->Register(ob1); audio->Register(ob2); audio->Broadcast("今天放暑假!"); delete audio; delete ob1; delete ob2; }
6、结果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
2021-06-30 C#数据结构
2021-06-30 C# HashTable
2021-06-30 C# HashSet
2020-06-30 Linux Shell 六 之echo和printf命令
2020-06-30 c++11模板的特化
2020-06-30 Linux Shell 四 之 Shell 基本运算符
2020-06-30 Linux Shell 三 之 参数传递