设计模式,观察者模式,c++实现,事件触发模式

观察者模式:定义:对象间一对多的依赖关系,使得当一个对象改变状态时,所有依赖于它的对象都会得到通知并被自动更新。在一对多的关系中,一为被观察者,多为观察者,被观察者依赖观察者。翻译翻译:被观察者类中有观察者类的基类,通常是一个基类指针容器,而这个基类中需要声明一个访问权限为public的函数(是否纯虚皆可,一般是纯虚函数,如果不需要被子类继承的话也可以不用virtual关键字,直接声明实现),用来在被观察者状态改变时被观察者调用触发观察者们的动作,这个函数一般把函数名写为Update(),默认好读而
摘要由CSDN通过智能技术生成

观察者模式:

定义:
对象间一对多的依赖关系,使得当一个对象改变状态时,所有依赖于它的对象都会得到通知并被自动更新。
在一对多的关系中,一为被观察者,多为观察者,被观察者依赖观察者。

翻译翻译:被观察者类中有观察者类的基类,通常是一个基类指针容器,而这个基类中需要声明一个访问权限为public的函数(是否纯虚皆可,一般是纯虚函数,如果不需要被子类继承的话也可以不用virtual关键字,直接声明实现),用来在被观察者状态改变时被观察者调用触发观察者们的动作,这个函数一般把函数名写为Update(),默认好读而已,具体如何看项目规范。
类图摘自设计模式之禅:
在这里插入图片描述
优点
观察者与被观察者之间是抽象耦合,易扩展。
形成触发机制,例如:张三抢了李四的钱包,李四告派出所,派出所立案,立案后…这一系列触发都可以用update()封装,再由子类实现,形成多态,一连串的触发,也就形成了广播链。

使用场景
可拆分的关联行为场景。
事件多级触发。
跨系统消息交换场景,如消息队列的处理机制。

注意点
广播链逻辑复杂难以维护,不应过长,一个消息传递两次左右较好控制。
广播链与责任链的区别在于广播链的消息随时可更改,责任链的消息不可变或稍作修正。

异步处理:观察者较多,处理时间较长时采用异步,需考虑线程安全和队列的问题,建议看message queue。

项目中的观察者模式
观察者中的update()方法接收两个参数,一个是被观察者,一个是DTO(Data Transfer Object,据传输对象),DTO一般是个纯洁的JavaBean,由被观察者生成,由观察者消费,考虑到远程传输,一般消息以xml格式传输。

观察者响应方式:异步与同步
情况:观察者接收被观察者传的信息并进行处理,若被观察者较多,观察者为能快速响应,就需要采用同步或异步响应的办法。
同步:使用缓存技术提供足够的资源保证快速响应,好方法,开发难,压力测试得充分。
异步:多线程,不管是被观察者启动线程还是观察者启动线程,都可以显著的提高性能。

同时,在做出回应需要消耗大量资源时,被观察者需要判断是否需要发送消息给观察者,以减少资源的损耗。

身边的观察者模式
文件系统:在一个 目录下新建立一个文件,这个动作会通知目录管理器增加该目录,并通知磁盘管理器减少1kb空间。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值