C++ 观察者模式示例

观察者模式是一种常用的设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听一个主题对象。当主题对象的状态发生变化时,所有观察者对象都会得到通知并更新自身。

代码示例

#include <iostream>
#include <list>

using namespace std;

class Object; class Observe { public: Observe(Object* obj = nullptr) : m_pObj(obj) {} void careObj(Object* obj) { m_pObj = obj; } virtual void update() = 0; protected: Object* m_pObj; };

class Object { public: void addObserve(Observe* obs) { m_lst.push_back(obs); } void delObserve(Observe* obs) { m_lst.remove(obs); } void notify() { for (const auto& obs : m_lst) { obs->update(); } } int state; list<Observe*> m_lst; };

class Student : public Observe { public: Student(Object* obj = nullptr) { m_pObj = obj; } virtual void update() { int state = m_pObj->state; if (0 == state) { cout << "study" << endl; } else { cout << "play game" << endl; } } };

class Teacher : public Object { public: };

int main() { Teacher jack; Student tom(&jack); Student zs; zs.careObj(&jack); jack.addObserve(&tom); jack.addObserve(&zs); jack.state = 1; jack.delObserve(&zs); jack.notify(); return 0; }

代码解释

  1. 包含了iostream和list头文件。
  2. 使用了命名空间std。
  3. 声明了Object和Observe类。
  4. Observe类的定义开始。
  5. 构造函数,初始化m_pObj为nullptr。
  6. careObj函数,用于设置m_pObj指针指向的对象。
  7. 纯虚函数update,子类需要实现该函数。
  8. protected保护成员变量m_pObj,指向被观察的对象。
  9. Object类的定义开始。
  10. addObserve函数,向m_lst列表中添加观察者。
  11. delObserve函数,从m_lst列表中移除观察者。
  12. notify函数,通知所有观察者进行更新。
  13. int类型的状态变量state。
  14. 存储观察者的列表m_lst。
  15. Student类的定义开始,继承自Observe类。
  16. 构造函数,初始化m_pObj指针。
  17. update函数,根据被观察对象的状态进行不同的操作。
  18. Teacher类的定义开始,继承自Object类。
  19. main函数的开始。
  20. 创建Teacher对象jack。
  21. 创建Student对象tom,将tom的被观察对象设置为jack。
  22. 创建Student对象zs。
  23. 将zs的被观察对象设置为jack。
  24. 调用jack的addObserve函数,将tom添加为观察者。
  25. 调用jack的addObserve函数,将zs添加为观察者。
  26. 将jack的状态设为1。
  27. 调用jack的delObserve函数,将zs从观察者列表中移除。
  28. 调用jack的notify函数,通知所有观察者进行更新。
  29. 返回0,表示程序正常结束。

总结

通过这个简单的示例,我们可以看到观察者模式的实现过程。它可以帮助我们在程序中实现对象之间的松耦合关系,让对象之间的交互更加灵活。

C++ 观察者模式示例:学生观察老师状态变化

原文地址: https://www.cveoy.top/t/topic/qyhr 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录