每日设计模式——观察者模式

本文介绍了观察者模式的基本概念及其在软件开发中的应用。通过实例演示了如何使用观察者模式实现对象间的依赖关系,并展示了具体的代码实现。讨论了该模式的优势与不足。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      观察者模式,定义对象间一种一对多的一览关系,当当一个对象的状态发生改变时,所有依赖于他的对象都得到通知通知并被自动更新。其适用性在于,当一个抽象模型有两个方面,其中一个方面依赖于另一个方面,将这两者封装在独立的对象中以使他们可以各自独立的改变和复用;当一个对象的改变需要同时改变其他对象,而不知道具体有多少对象有待改变;当一个对象必须通知其他对象,而它又不能假定其他对象是谁。

      《大话设计模式》里面举得例子是老板外出回来,通知所有的员工,各位正在不务正业的同志们,赶紧干活,老板回来了!同时提出了观察者模式的不足,不可能所有的方法都用同样的方法名,那么出现不同的方法的时候怎么办,C#中可以用委托解决这个问题。然而C++中遇到这种需要委托的时候应该怎么办?有待考证……

      古剑的应用还是没有想到,回头再想想吧。倒是我那个小项目上有个类似的应用可以考虑用这个模式。那个需求是我要从串口接收数据,而这些数据是一个点一个点的数据,没个点都有一个ID,我接到这些数据后要在界面上所有已经配置好节点的控件中找到这个点,然后更新它的数据,同时要把这个点的数据存到数据库里。当然了,还会引起其他的一些变化,我都有点不记得了,大概去年这个时候做的吧。我觉得这种时候用观察者模式还是不错的~

 

observer.h 文件

 

subject.h 文件

 

subject.cpp 文件

 

concreteSubject.h 文件

 

concreteSubject.cpp 文件

 

concreteObserver.h 文件

 

concreteObserver.cpp 文件

 

main.cpp 文件

 

运行结果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值