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

 时间:2026-04-22 12:37:33

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;

}

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

  • 我的世界怎么隐藏手
  • 我的世界手机版新手指南10:地下工程
  • LOL时间刺客艾克的技能是什么?该怎么玩?
  • 我的世界花盆的属性及合成方法
  • 我的世界迷路了怎么办?
  • 热门搜索
    荷花一般什么时候开 言不由衷是什么意思 水天一色的意思 不慌不忙的意思 土豆片敷脸有什么好处 醒悟的意思 嬉戏的意思 什么的太阳花 学画画先学什么 i miss you是什么意思