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

 时间: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时间刺客艾克的技能是什么?该怎么玩?
  • 我的世界花盆的属性及合成方法
  • 我的世界迷路了怎么办?
  • 热门搜索
    王莽岭景区 一个手机号可以注册几个微信号 中央党校怎么考 林肯mkz怎么样 中国旅游城市 美国旅游攻略 什么软件一天可以赚50 个人简历怎么写范文 摩纳哥旅游 潍坊旅游景点