35 lines
762 B
C++
35 lines
762 B
C++
/**
|
||
* @name 观察者模式
|
||
* @brief: 定义对象间一对多的依赖关系
|
||
* @note 场景:事件处理系统、消息订阅、MVC 模型更新视图
|
||
*/
|
||
|
||
#include <string>
|
||
#include <vector>
|
||
|
||
class Observer {
|
||
public:
|
||
virtual void update(const std::string& msg) = 0;
|
||
};
|
||
|
||
class Subject {
|
||
std::vector<Observer*> observers;
|
||
public:
|
||
void attach(Observer* o) { observers.push_back(o); }
|
||
void notify(const std::string& msg) {
|
||
for (auto o : observers) o->update(msg);
|
||
}
|
||
};
|
||
|
||
class ConcreteObserver : public Observer {
|
||
void update(const std::string& msg) override { /* 处理消息 */ }
|
||
};
|
||
|
||
// 使用
|
||
int main()
|
||
{
|
||
Subject subject;
|
||
subject.attach(new ConcreteObserver());
|
||
subject.notify("Event occurred!");
|
||
return 0;
|
||
} |