zoukankan      html  css  js  c++  java
  • c++设计模式之观察者模式

    概念:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

    通常讲就是被观察者向左右观察对象通知其状态的改变,以使得观察者进行相应信息的更新。

    代码如下

    #include
    
    
    class ObjectUser;//被观察者对象
    class Observer
    {
    protected:
        ObjectUser *m_ObjectUser;
    
    public:
        virtual void NotifyMessage() = 0;
    };
    
    class Observer1:public Observer
    {
        Observer1(ObjectUser *g_ObjectUser)
        {
            m_ObjectUser = g_ObjectUser;
        }
    public:
        virtual void NotifyMessage()
        {
            int cmd = m_ObjectUser->command;
            cout << "被观察者命令改变为"<<cmd;
        }
    };
    
    class Observer2:public Observer
    {
        Observer2(ObjectUser *g_ObjectUser)
        {
            m_ObjectUser = g_ObjectUser;
        }
    public:
        virtual void NotifyMessage()
        {
            cout << "被观察者通知消息给我说它发生了改变,要我更新";
            //.........
        }
    };
    
    
    class ObjectUser
    {
        friend class Observer;
    protected:
        int command;
        
        std::vector<Observer*> ObserverList;
    
    public:
        void AddObserver(Observer* pUser)
        {
            ObserverList.push_back(pUser);
        }
    
        void NotifyMsg()
        {
            for (int i = 0;i<ObserverList.size();i++ )
            {
                ObserverList[i]->NotifyMessage();
            }
        }
    };
    
    
    void main()
    {
        ObjectUser *OUser = new ObjectUser();
        Observer pOb1 = new Observer1(OUser);
        Observer pOb2 = new Observer2(OUser);
    
        OUser->AddObserver(pOb1);
        OUser->AddObserver(pOb2);
        OUser->NotifyMsg();
    
    }
  • 相关阅读:
    sersync实时同步实战+nfs共享存储
    ssh协议详解
    nfs共享存储+实时同步(结合rsync+inotify)
    sqlserver 个人整理
    vba 自定义菜单与vba通过sql查询
    c# 自定义排序Compare
    c# delegate知识
    mvc Dapper_Report_Down_ExcelFile
    c# bootstrap-table 知识
    c# Stream to File的知识点
  • 原文地址:https://www.cnblogs.com/forbeat/p/5072688.html
Copyright © 2011-2022 走看看