设计模式---观察者模式

来源:互联网 发布:js 集合 编辑:程序博客网 时间:2024/06/05 20:32

观察者模式


又叫发布-订阅模式
定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察,使它们能够自动更新自己。


#include<iostream>

#include<list>

using namespace std;

class Observer
{
    public:
        virtual void Update(){}
};

class Subject
{
    private:
        list<Observer*> m_observers;

    protected:
        string m_status;
    
    public:
        void Attach(Observer *observer)
        {
            m_observers.push_back(observer);
        }

        void Remove(Observer *observer)
        {
            m_observers.remove(observer);
        }

        void Notify()
        {
            list<Observer*>::iterator iter = m_observers.begin();
            for(;iter != m_observers.end();iter++)
            {
                (*iter)->Update();
            }
        }

        virtual void SetStatus(string s){}
        virtual string GetStatus(){}
};

class ConcreteSubject:public Subject
{

    public:
        void SetStatus(string s){m_status = s;}
        string GetStatus(){return m_status;}
};

class ConcreteObserver:public Observer
{
    private:
        string m_name;
        Subject *m_subject;
    public:
        ConcreteObserver(string name,Subject *sub):m_name(name),m_subject(sub){}
    
    void Update()
    {
        string status = m_subject->GetStatus();
        cout<<m_name<<" -----"<<status<<endl;
    }
};

int main()
{
    ConcreteSubject *s = new ConcreteSubject();
    s->SetStatus("123");

    s->Attach(new ConcreteObserver("aa",s));
    s->Attach(new ConcreteObserver("bb",s));
    s->Attach(new ConcreteObserver("cc",s));

    s->Notify();

    return 0;
}

原创粉丝点击