新闻中心

c++怎么实现一个观察者模式_c++观察者设计模式实现示例

2025-11-04
浏览次数:
返回列表
观察者模式通过Subject管理Observer列表并在状态变化时通知所有观察者。首先定义Observer抽象类,包含纯虚update方法;Subject类维护Observer指针容器,实现attach、detach和notify方法;ConcreteObserver继承Observer并重写update输出消息;使用时创建Subject和多个ConcreteObserver对象,注册后调用notify触发更新,移除观察者后不再接收通知。需注意指针生命周期安全与迭代中修改的异常风险。该模式适用于事件驱动系统,实现松耦合的一对多依赖关系。

c++怎么实现一个观察者模式_c++观察者设计模式实现示例

在C++中实现观察者模式,核心是定义一个被观察的对象(Subject),它可以注册、移除和通知多个观察者(Observer)。当被观察对象的状态发生变化时,所有注册的观察者都会自动收到通知。这种设计模式常用于事件处理系统、GUI组件更新、模型-视图架构等场景。

定义观察者接口

观察者通常是一个抽象基类,包含一个更新方法,由具体观察者实现:

class Observer {
public:
    virtual ~Observer() = default;
    virtual void update(const std::string& message) = 0;
};

定义被观察者(Subject)

Subject负责管理观察者列表,并在状态变化时调用它们的update方法:

#include <vector>
#include <algorithm>
<p>class Subject {
private:
std::vector<Observer*> observers;</p><p>public:
void attach(Observer* obs) {
observers.push_back(obs);
}</p><pre class='brush:php;toolbar:false;'>void detach(Observer* obs) {
    observers.erase(
        std::remove(observers.begin(), observers.end(), obs),
        observers.end()
    );
}

void notify(const std::string& message) {
    for (auto* obs : observers) {
        obs->update(message);
    }
}

};

VALL-E VALL-E

VALL-E是一种用于文本到语音生成 (TTS) 的语言建模方法

VALL-E 134 查看详情 VALL-E

实现具体观察者

创建具体的观察者类,继承自Observer并实现update逻辑:

class ConcreteObserver : public Observer {
private:
    std::string name;
<p>public:
ConcreteObserver(const std::string& n) : name(n) {}</p><pre class='brush:php;toolbar:false;'>void update(const std::string& message) override {
    std::cout << name << " 收到消息: " << message << "\n";
}

};

使用示例

下面是一个完整的使用例子:

#include <iostream>
#include <memory>
<p>int main() {
Subject subject;
ConcreteObserver observer1("观察者A");
ConcreteObserver observer2("观察者B");</p><pre class='brush:php;toolbar:false;'>subject.attach(&observer1);
subject.attach(&observer2);

subject.notify("状态已更新!");

subject.detach(&observer2);

std::cout << "--- 移除观察者B后 ---\n";
subject.notify("第二次更新");

return 0;

}

输出结果为:

观察者A 收到消息: 状态已更新!
观察者B 收到消息: 状态已更新!
--- 移除观察者B后 ---
观察者A 收到消息: 第二次更新

注意点:

  • 观察者使用裸指针存储,需确保生命周期安全。若Subject生命周期长于观察者,应考虑使用weak_ptr或提供清理机制。
  • notify过程中避免在回调里修改观察者列表,否则可能引发迭代器失效。
  • 可扩展支持不同消息类型或参数,比如传递具体数据对象。

基本上就这些。这个模式结构清晰,解耦了对象间的依赖,适合一对多的通知场景。

以上就是c++++怎么实现一个观察者模式_c++观察者设计模式实现示例的详细内容,更多请关注其它相关文章!


# 管理机制  # 西安网站推广微馨hfqjwl  # 教育网站建设注意什么  # 大泉州网站优化推广  # 专业关键词排名项目  # 铜陵网络营销推广多少钱  # 杭州正规seo优化代理  # 遂平网络推广营销公司  # 网站推广的指标是什么  # 植保无人机市场推广营销策划方案  # 网站推广方法推荐模板  # 复用  # 多路  # go  # 如何实现  # 何为  # 并在  # 多个  # 是一个  # 都是  # 移除  # stream  # ios  # c++  # ai 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 深入理解Promise链:如何在catch后中断then的执行  抓大鹅解压小游戏 抓大鹅摸鱼解压入口  wps文字怎么插入目录并自动更新_wps文字如何插入目录并自动更新方法  Python中高效访问嵌套字典与列表中的键值对  R星幕后开发视频泄露 包含《GTA6》等多款大作  必由学官方网站入口 必由学学生教师共用登录通道  海棠账号登录入口_登录海棠账户同步阅读记录  企业名称高精度匹配:N-gram方法在结构相似性分析中的应用  腾讯视频怎么举报不良内容_腾讯视频内容举报流程与违规信息处理方法  Django表单提交验证失败后保持字段值不刷新  斑马英语APP如何开启夜间护眼阅读_斑马英语APP夜间模式与低蓝光设置教程  初次安装JDK时环境变量如何正确配置_J*A_HOME与PATH设置规则讲解  Pandas DataFrame:高效添加条件计算列  Python字典中优雅地迭代剩余元素的方法  TikTok国际版网页端快速入口 TikTok全球版短视频浏览教程  Bing引擎入口最新2025 Bing搜索免费官方登录  12306选座怎么选到商务座_12306商务座选择与配置说明  谷歌推RCS信息存档功能:公司可监控员工私密信息!  J*aScript 字符串标签转换:使用正则表达式高效替换  豆包手机助手发布技术预览版:直接嵌入手机系统!努比亚样机发售  Vue.js 图片显示异常排查:理解应用挂载范围与DOM ID唯一性  MAC如何安全彻底地删除文件_MAC使用终端命令确保文件无法被恢复  不会效仿卡普空!《铁拳》制作人澄清:不采取赛事付费|直播|  解决Bootstrap卡片顶部边距导致背景图下移的问题  mcjs网页版在线存档 mcjs云存档登录入口  Lar*el递归关系中排除子孙节点的策略  天眼查怎么看公司融资情况 天眼查企业融资历史查询步骤【攻略】  荒野行动PC版怎么注册_荒野行动PC版账号注册详细流程图文教程  React/Next.js中实现列表项的动态移动与状态管理:兼论唯一键的重要性  包子漫画官方网站阅读入口-包子漫画在线漫画官网直达链接  顺丰快件物流信息 官方网站查询入口  uc浏览器网页版入口 uc浏览器网页版最新网址  Pandas DataFrame 多条件优先级排序与排名  基于动态规划的房屋花卉种植最小成本算法详解  使用 Pandas 高效处理 .dat 文件:数据清洗与数值计算实战  抖音未来赚钱的新趋势 2025年值得关注的变现风口分析  win11专注助手在哪 Win11免打扰模式设置与自动化规则【指南】  小米14应用无法联网原因分析_小米14网络权限修复  2025-2030年全球乘用车销量预测:新能源成增长主力  Google翻译怎么语音输入_Google翻译语音输入功能使用与设置方法  淘宝网网页版登录入口 淘宝官方网页版快捷登录  深入理解J*aScript中的B样条曲线与节点向量生成  J*a最大堆Heapify方法修复:索引计算与边界条件深度解析  夸克浏览器图书入口 夸克手机浏览器阅读入口  怎么在浏览器上运行HTML文件_浏览器运行HTML文件技巧【技巧】  Android Studio计算器C键逻辑错误排查与修复:条件判断优化指南  mc.js免安装版 mc.js一键畅玩入口  CSS如何设置hover状态颜色_hover伪类调整背景或文字颜色  QQ邮箱网页版入口 QQ邮箱官方邮箱登录通道  css滚动区域卡顿如何改善_css滚动问题用will-change优化渲染 

搜索