设计模式教程:观察者模式

2026-03-02 12:44:41

1、首先看下观察者模式的uml图:

设计模式教程:观察者模式

设计模式教程:观察者模式

2、抽象的观察者实现如下:

class Observer

{

public:

    virtual void Update(int) = 0;

};

设计模式教程:观察者模式

3、主题的接口实现如下:

class Subject

{

public:

    virtual void Attach(Observer *) = 0;

    virtual void Detach(Observer *) = 0;

    virtual void Notify() = 0;

};

设计模式教程:观察者模式

4、对于主题的实现:

class ConcreteSubject: public Subject{

public:

    void Attach(Observer* o){  m_list.add(o);  }

    void Detach(Observer* o){  m_list.remove(o); }

    void notify()

    {

        for_each(m_list.begin(), m_list.end(),[&](Observer *o ){o->update();});

    }

    int m_state;

private:

    std::list<Observer *> m_list;

};

设计模式教程:观察者模式

5、对观察者的实现:

class ConcreteObserver: public Subject

{

    void update(){   cout << "hehhe"; }

};

设计模式教程:观察者模式

6、对观察者的测试:

int main()

{

ConcreteSubject s;

ConcreteObserver o;

s.Attach(&o);

s.m_state = 1;

s.notify();

s.m_state = 2;

s.notify();

return 1;

}

设计模式教程:观察者模式

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢