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

 时间: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时间刺客艾克的技能是什么?该怎么玩?
  • 我的世界花盆的属性及合成方法
  • 我的世界迷路了怎么办?
  • 热门搜索
    梦幻克隆装扮有什么用 circle是什么意思 小县城适合开什么店 水滴轮什么牌子好 甘蔗男是什么意思 惨淡经营的意思 梦见婴儿是什么意思 funny是什么意思 副省级城市是什么意思 清标是什么意思