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();

}
原文地址:https://www.cnblogs.com/forbeat/p/5072688.html