C++ 观察者模式示例:学生观察老师状态变化
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;
}
代码解释
- 包含了iostream和list头文件。
- 使用了命名空间std。
- 声明了Object和Observe类。
- Observe类的定义开始。
- 构造函数,初始化m_pObj为nullptr。
- careObj函数,用于设置m_pObj指针指向的对象。
- 纯虚函数update,子类需要实现该函数。
- protected保护成员变量m_pObj,指向被观察的对象。
- Object类的定义开始。
- addObserve函数,向m_lst列表中添加观察者。
- delObserve函数,从m_lst列表中移除观察者。
- notify函数,通知所有观察者进行更新。
- int类型的状态变量state。
- 存储观察者的列表m_lst。
- Student类的定义开始,继承自Observe类。
- 构造函数,初始化m_pObj指针。
- update函数,根据被观察对象的状态进行不同的操作。
- Teacher类的定义开始,继承自Object类。
- main函数的开始。
- 创建Teacher对象jack。
- 创建Student对象tom,将tom的被观察对象设置为jack。
- 创建Student对象zs。
- 将zs的被观察对象设置为jack。
- 调用jack的addObserve函数,将tom添加为观察者。
- 调用jack的addObserve函数,将zs添加为观察者。
- 将jack的状态设为1。
- 调用jack的delObserve函数,将zs从观察者列表中移除。
- 调用jack的notify函数,通知所有观察者进行更新。
- 返回0,表示程序正常结束。
总结
通过这个简单的示例,我们可以看到观察者模式的实现过程。它可以帮助我们在程序中实现对象之间的松耦合关系,让对象之间的交互更加灵活。
原文地址: https://www.cveoy.top/t/topic/qyhr 著作权归作者所有。请勿转载和采集!