C++如何使用观察者模式实现事件通知

观察者模式用于对象间一对多依赖,状态变更时自动通知所有观察者。2. 主题类维护观察者列表并实现添加、删除及通知方法。3. 观察者接口定义更新函数,由具体观察者实现。4. 以按钮点击为例,按钮为具体主题,UI组件为观察者,点击时通知所有观察者更新。

C++如何使用观察者模式实现事件通知

在C++中,观察者模式是一种行为设计模式,适用于实现对象间的一对多依赖关系,当一个对象状态改变时,所有依赖它的对象都会自动收到通知。这种机制非常适合用来实现事件通知系统。

定义主题(Subject)接口

主题是被观察的对象,它维护一个观察者列表,并提供添加、删除和通知观察者的方法。

class Subject { public: virtual ~Subject() = default; virtual void attach(class Observer* observer); virtual void detach(class Observer* observer); virtual void notify();

protected: std::vector<class Observer*> observers; };

void Subject::attach(Observer* observer) { observers.push_back(observer); }

void Subject::detach(Observer* observer) { observers.erase( std::remove(observers.begin(), observers.end(), observer), observers.end() ); }

void Subject::notify() { for (Observer* obs : observers) { obs->update(); } }

定义观察者(Observer)接口

观察者定义接收通知的接口。通常是一个纯虚函数,由具体观察者实现。

class Observer { public: virtual ~Observer() = default; virtual void update() = 0; };

实现具体主题与观察者

以一个简单的按钮点击事件为例。按钮是主题,UI组件是观察者。

立即学习C++免费学习笔记(深入)”;

C++如何使用观察者模式实现事件通知

Quinvio AI

AI辅助下快速创建视频,虚拟代言人

C++如何使用观察者模式实现事件通知30

查看详情 C++如何使用观察者模式实现事件通知

class Button : public Subject { public: void click() { std::cout // 触发事件 } };

class StatusBar : public Observer { public: void update() override { std::cout << “StatusBar: Updating status…n”; } };

class Logger : public Observer { public: void update() override { std::cout << “Logger: Log event occurred.n”; } };

使用示例

将观察者注册到主题,当事件发生时自动通知。

int main() { Button btn; StatusBar bar; Logger logger;

btn.attach(&bar); btn.attach(&logger);  btn.click(); <font color="#008000">// 输出所有观察者的响应</font>  btn.detach(&logger); btn.click(); <font color="#008000">// 只有 StatusBar 收到通知</font>  <font color="#0000FF">return</font> 0;

}

基本上就这些。通过继承和多态,C++可以干净地实现观察者模式。注意管理好对象生命周期,避免悬挂指针。如果需要更灵活的通知机制,可以扩展update方法传参,比如传递事件类型或数据。

c++ 点击事件 for void 虚函数 纯虚函数 接口 class public protected 对象 事件 default ui

上一篇
下一篇