设计模式之观察者模式

来源:互联网 发布:阿里云有在线客服吗 编辑:程序博客网 时间:2024/05/21 11:27

观察者模式定义了一对多的依赖关系,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新,松耦合。本质上是一种发布订阅的模型。


代码如下

#include <list>#include <iostream>using namespace std;class IObserver{public:    virtual void update(string) = 0;};class ISubject{public:    virtual void addObserver(IObserver*) = 0;    virtual void removeObserver(IObserver*) = 0;    virtual void notify(string) = 0;};class Subject :public ISubject{public:    void addObserver(IObserver* observer)    {        m_observers.push_back(observer);    }    void removeObserver(IObserver* observer)    {        m_observers.remove(observer);    }    void notify(string message)    {        list<IObserver*>::iterator iter = m_observers.begin();        for (; iter != m_observers.end(); iter++)        {            (*iter)->update(message);        }    }private:    list<IObserver*> m_observers;    string m_message;};class Observer :public IObserver{public:    Observer(int index, ISubject *sub):m_index(index),m_sub(sub)    {        m_sub->addObserver(this);    }    void update(string message)    {        cout << "I am Observer "<<m_index<<". "<< message.c_str()<<endl;    }private:    int m_index;    ISubject *m_sub;};int main(){    ISubject* sub = new Subject();    IObserver* ob1 = new Observer(1, sub);    IObserver* ob2 = new Observer(2, sub);    string message = "OK!";    sub->notify(message);    getchar();}






0 0
原创粉丝点击