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、结果

 

posted @   卖雨伞的小男孩  阅读(129)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源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 三 之 参数传递
点击右上角即可分享
微信分享提示