c++之观察者模式

观察者模式(Observer Pattern)的C++实现 观察者模式是一种常用的行为设计模式,它提供了一种对象间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式的核心思想是将观察者(Observer)对象注册到被观察者(Subject)对象上,当被观察者的状态发生变化时,所有注册的观察者都会被通知。通过观察者模式,当被观察者对象的状态发生变化时,所有注册的观察者对象都会收到相应的通知,从而实现了对象间的解耦合和松耦合。观察者模式可以帮助我们实现松耦合的设计,使得被观察者和观察者之间的依赖关系更加灵活和可扩展。 阅读详情

观察者模式属于行为型模式,即当对象间存在一对多关系时,则考虑使用观察者模式。比如,当一个对象被修改时,则会自动通知依赖它的对象。

栗子场景:课堂上,李老师(具体通知者)叫小明(具体观察者)和大红(具体观察者)坐下,然后再单独叫小明站起来。

代码:

#include <iostream>
#include <list>

using namespace std;

//抽象观察者
class Observer{
public:
	virtual void update(std::string) = 0;
};

//具体观察者小明
class ConcreateObserverXiaoMing :public Observer
{
public:
	virtual void update(std::string s)
	{
		cout << "XiaoMing"<< s.c_str() << endl;
	}
};

//具体观察者大红
class ConcreateObserverDaHong :public Observer
{
public:
	virtual void update(std::string s)
	{
		cout << "DaHong " << s.c_str() << endl;
	}
};

//抽象通知者
class Subject{
public:
	virtual void Attach(Observer *ob) = 0;
	virtual void Detach(Observer *ob) = 0;
	virtual void Notify() = 0;
};

//具体通知者 李老师
class ConcreateSubjectLiLaoshi :public Subject
{
public:
	//增加观察者
	virtual void Attach(Observer *ob)
	{
		if (ob != nullptr)
		{
			m_observer.push_back(ob);
		}
	}

	//移除观察者
	virtual void Detach(Observer *ob)
	{
		if (ob != nullptr)
		{
			m_observer.remove(ob);
		}
	}

	//通知
	virtual void Notify()
	{
		//list<Observer*>::iterator iter = m_observer.begin();
		auto iter = m_observer.begin();
		for (; iter != m_observer.end(); iter++)
		{
			(*iter)->update(m_staus);
		}
	}

	void setStatus(std::string s)
	{
		m_staus = s;
	}

private:
	list<Observer*> m_observer;
	std::string m_staus;
};

int main()
{
	ConcreateSubjectLiLaoshi conSub;
	ConcreateObserverXiaoMing xiaoMing;
	ConcreateObserverDaHong daHong;
	conSub.Attach(&xiaoMing);
	conSub.Attach(&daHong);

	conSub.setStatus("坐下");
	conSub.Notify();

	conSub.Detach(&daHong);
	conSub.setStatus("站起来");
	conSub.Notify();

	return 0;
}

 

C++ 观察者模式 观察者模式(Observer Pattern),定义了对象间的一对多的依赖关系,让多个观察者对象同时监听某一个主题对象(被观察者)。当主题对象的状态发生更改时,会通知所有观察者,让它们能够自动更新。 阅读详情

相关推荐

论文记录:Affine Formation Maneuver Control of Multiagent Systems

多智能体编队控制仿真记录 实现功能:平移/旋转/尺寸缩放/shear,见截图 注意:本仿真图只是起到了演示效果,中间过程速度产生突变,实际中是不允许的。需要进行速度规划,这一点论文中仿真图更为贴合实际。 参考论文:Zhao, S. (2018). Affine Formation Maneuver Control of Multiagent Systems. IEEE Transactions on Automatic Control, 63(12), 4140–4155. 突然发现有个博主写得很好,参考:

W1H1J1的博客 2108

C++设计模式(5)——观察者模式

C++ 观察者模式

伍粟的博客 4025

MemSeg:一种差异和共性来检测图像表面缺陷的半监督方法

本文认为人为创建类内差异和保持类内共性可以帮助模型实现更好的缺陷检测能力,从而更好地区分非正常图像。如图一所示。差异(differences):MemSeg引入人工模拟的异常图像在训练阶段使模型能够区分正常和异常的图像,减轻了半监督学习只能用正常样本进行训练的不足,然后在推理阶段可以直接输入图像无需做任何后处理。共性(commonalities):MemSeg引入了一个记忆池来记录正常样本的通用模式,在训练和推理阶段,比较输入图像和记忆池中的样本之间的差异,为异常区域的定位提供有用的信息。

斯人若彩虹,遇上方知有! 4839

【C++】—— 观察者模式

观察者模式详解

m0_56069910的博客 2648

【DaVinci Configurator专题】-5-通过Data Mapping自动创建CAN信号关联的Port并添加到APP SWC

目录 1 导入CAN Matrix变更后的Arxml文件 2 自动创建CAN信号关联的APP Port 3 CAN信号与App SWC的接口映射/连接 4 结尾 <--返回「实战篇」博文-总目录--> <--返回「Autosar从入门到精通-实战篇」专栏主页--> 关键词: DaVinci Developer DaVinci Configurator Pro ARXML AUTOSAR System Description Network Explorer 1

「汽车电子助手」的博客 5128

毕设助力!从0到1构建基于YOLO的家居安防异常活动监测系统,让你的毕设守护家庭安全

做完这个项目,你会发现自己完整走过了“数据采集→标注→模型训练→功能集成→界面开发”的毕设全流程,这不仅是技术能力的证明,更是对“技术守护生活”这一理念的实践。答辩时,你可以重点讲这几点:系统解决了家居安防的哪些痛点、对比了不同YOLO模型的性能差异、系统未来能怎么优化(比如对接智能门锁/报警器、实现语音交互)。未来,这个系统还能往“更智能”的方向发展:比如结合行为分析判断异常意图、开发移动端APP实现全屋设备联动、在智慧社区中实现多家庭联防……想象空间很大。

LXY_LOVE36的博客 120

C++设计模式——观察者模式(Observer Pattern)

C++设计模式——观察者模式(Observer Pattern) 微信公众号:幼儿园的学霸 目录 文章目录C++设计模式——观察者模式(Observer Pattern)目录前言定义代码示例总结观察者模式和中介模式优缺点适用场景及应用示例参考资料 前言 观察者模式面向的需求是:A对象(观察者)对B对象(被观察者)的某种变化高度敏感,需要在B变化的一瞬间做出反应。举个例子,新闻里喜闻乐见的警察抓小偷,警察需要在小偷伸手作案的时候实施抓捕。在这个例子里,警察是观察者、小偷是被观察者,警察需要时刻盯着小偷的一

leonardohaig的博客 1万+

实战|2026美团&大众点评餐饮数据抓取:Playwright/Selenium反爬全攻略

核心结论:2026年美团&大众点评的反爬核心是“多维度风控”,需组合使用“住宅IP+设备指纹伪装+真人行为模拟+动态验证处理”,Playwright是最优工具,Selenium仅作为补充。效率优化:单机爬取速度建议控制在“每小时500-800条”,避免高频请求触发风控;分布式爬取需确保每个节点使用独立住宅IP,且行为轨迹不一致。扩展方向集成WASM解密工具,破解2026年美团的Token加密;用AI识别动态点选验证,提升验证通过率;对接大数据平台,对抓取的餐饮数据进行可视化分析。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2461

C++设计模式 - 观察者Observer模式

C++面向对象设计模式之观察者模式

大秦坑王的专栏 4995

22、常见加密哈希算法及安全机制解析

本文详细解析了多种常见加密哈希算法,包括SHA系列、RIPEMD、Tiger、HAVAL、Whirlpool等,涵盖其工作原理、安全性与性能对比。同时探讨了哈希攻击方式如预映像攻击和彩虹表,并介绍了盐、MAC、HMAC等防御机制。结合密码存储、消息完整性验证及区块链应用案例,分析了不同场景下的算法选择建议,并展望了哈希算法在创新、融合与标准化方面的未来发展趋势。

seed的博客 390

SQL中的时间计算:员工每日工作时长

摘要:本文介绍了一个使用SQL查询计算员工每日工作时长的实用方法。通过分析包含员工打卡记录的数据库表,利用CTE(公共表表达式)将日期分组,计算最早和最晚打卡时间差,最终以"小时:分钟"格式输出工作时长。该方法适用于每日两次打卡的场景,并提示了处理漏打卡等特殊情况时的注意事项,为企业考勤管理提供了有效的数据支持方案。(148字)

m0_74337424的博客 412

C++设计模式-观察者模式

目录 基本概念 代码与实例 基本概念 观察者模式又叫做发布-订阅模式; 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动的更新自己。 对应的UML如下(此图来源于 大话设计模式): 代码与实例 下面给出C++的实例,程序运行截图如下: 本人目前水平对这个...

IT1995的博客 8482

深度学习实战42-基于大模型开发MathGPT的原理介绍,让数学问题智能解答变为可能

大家好,我是微学AI,今天给大家介绍一下深度学习实战42-基于大模型开发MathGPT的原理介绍,让数学问题智能解答变为可能。在去年ChatGPT的发布后,各种国内外的大语言模型层出不穷涌现,但是大家都知道现在的模型的诟病的数学能力不足,就算是简单的数学题都可能算错,今天我就来给大家引入MathGPT的模型,用来解决GPT解决数学问题,对于简单的初中数学高中数学都可以解决,让数学问题精准答题得到实现。

微学AI的博客 1649

C++实现观察者模式Observer Pattern

观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的多有依赖者都会收到通知并自动更新。

优快云er_2015的博客 556

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

C++观察者模式

C++观察者模式   当对象间存在一对多关系时,则使用观察者模式(observer pattern)。比如,当一个对象被修改时,则会自动通知发依赖它的对象。观察者模式属于行为型模式。   Observer模式是应用最多、影响最广的设计模式之一,因为Observer的一个实例Model/View/Control(MVC)结构在系统开发架构设计中有着很重要的地位和意义,MVC实现了业务逻辑和表示层的解耦。在MFC(微软基础类库)中,Doc/View(文档视图结构)提供了实现MVC的框架结构。   在GOF的《设

田螺姑娘的博客 5456

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【设计模式】设计模式C++编程实现之观察者模式(ObserverPattern)

观察者模式定义: 定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会受到通知并自动更新。 观察者模式又叫做发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听

计算机专业同学的充电站。 2918

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

C++设计模式——观察者模式(observer pattern)

一、原理讲解 1.1意图 定义一种“一对多”的关系。当一个对象(被观察者/发布者)的状态发生改变时,所有依赖它的对象都将得到通知并更新。又有别名为发布-订阅(publish-subscribe)。 1.2应用场景 一个抽象模型有两个方面,其中一个方面依赖于另一方面。将这二者封装在独立的对象中,以使它们可以独立的改变和复用 当一个对象改变,连带其它对象也跟着改变,但是不需要知道具体改变对象...

净无邪博客 1141

C++_设计模式_观察者模式(Observer Pattern)

观察者模式定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知,并自动更新。观察者模式属于行为型模式,行为型模式关注的是对象之间的通讯,观察者模式就是观察者和被观察者之间的通讯。“观察”不是“直接调用”,实现观察者模式的时候要注意,观察者和被观察对象之间的互动关系不能体现成类之间的直接调用,否则就将使观察者和被观察对象之间紧密的耦合起来,从根本上违反面向对象的设计的原则。不管是观察者“观察”对象,还是被观察者将自己的改变“通知”观察者,都不应该直接调用。

bliu2_10的博客 966

C++设计模式之观察者模式(Observer pattern)

观察者模式: 为对象建立一种“通知依赖”关系,当一个对象(目标对象)的状态发生变化时,所有的依赖对象(观察者对象)都得到通知并自动更新。 观察者模式,又称发布-订阅模式,其所作的工作就是在解除耦合,弱化依赖关系,采用面向对象技术,让耦合的双方都依赖于抽象,而不是依赖于具体,将这二者封装在独立的对象中以使它们可以独立的改变和复用。 观察者模式中的四类角色: 1.Subject(目标):抽象的目标类,提供增加和删除观察者对象的的方法,以及一个抽象的Notify方法(通知机制),目标类可以是接口,也可以是抽象类和

weixin_43086349的博客 266

设计模式之观察者模式(Observer Pattern),C++篇

观察者模式是一种行为设计模式,用于对象间一对多的依赖关系。当被观察对象状态改变时,会自动通知所有依赖的观察者。该模式包含四个核心角色:主题(Subject)、观察者(Observer)、具体主题(Concrete Subject)和具体观察者(Concrete Observer)。适用场景包括事件处理系统、消息传递等需要松耦合通知机制的场合。代码示例展示了C++实现,通过主题维护观察者列表,在状态变化时循环通知所有观察者进行更新。该模式有效降低了对象间的耦合度,适用于状态变化引发连锁反应的系统设计。

guoguojiang_的博客 1003

观察者模式 (Observer Pattern)与几个C++应用例子

观察者模式实现一对多依赖关系,当主题对象状态变化时自动通知所有观察者。该模式包含四个核心角色:Subject(维护观察者列表)、ConcreteSubject(管理具体状态)、Observer(定义更新接口)和ConcreteObserver(实现业务逻辑)。通过C++示例展示了气象站(主题)与显示设备(观察者)的典型实现,演示了动态注册/移除观察者及状态自动通知机制。该模式有效解耦主题与观察者,增强系统灵活性,适用于GUI事件处理、发布-订阅系统等场景。

追赶时代的博客 654

《Head First 设计模式》C++实现【观察者模式(Observer Pattern)】

《Head First 设计模式》书中第2章——观察者模式(Observer Pattern)的C++代码实现。

Liber-coder的博客 306

c++ 观察者模式

详细描述的c++观察者模式的思想和两种实现方式

db_linux_driver的博客 911

设计模式实现CPP——观察者模式

在被观察者的虚基类中需要声明三个虚函数,分别完成添加、删除和通知观察者的功能,观察者的虚基类中声明一个虚函数,完成更新的功能。随后具体的被观察者和观察者分别继承自两个虚基类,并重写其中的虚函数完成特定的功能。的关系,由两部分组成,分别是被观察者(一)和观察者(多),具体实现的功能为,被观察者中状态发生改变时,通知其管理的所有观察者做出相应的改变。首先需要被观察者和观察者分别有一个。2、被观察者虚基类(Subject)3、观察者示例(显示设备)4、被观察者示例(气象站)其组织结构大致如下所示。

qq_45835091的博客 347
上一篇: 面向对象设计的七大原则
下一篇: c++之单例模式
Qt上位机开发
Qt上位机开发 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄9年 9664粉丝 178原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值