观察者模式

在《headfirst》一书中说:出版者+订阅者=观察者模式。

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

该模式的主要目的就是解耦,让数据的主模块与关心数据变化的模块分离,降低他们之间的粘合度。其次,该模式可以让功能框架更加清晰,方便系统的维护。

模式结构图如下(来自《GOF设计模式》):

该模式主要分为“推”和“拉”两种模型。

推模型:目标向观察者发送关于改变的信息,而不关心它们需要与否。缺点:每次都会向所有观察者推送数据,可能会出现不必要的推送,造成冗余。

拉模型:目标只通知观察者改变,改变的信息由各个观察者去目标获取。缺点:观察者需要确定是哪条数据发生了改变,且要调用目标的获取数据的接口,增加了耦合度。

该模式还有一个点需要注意的就是何时出发Notify函数。

第一种情况:在目标内部数据发生改变时调用。当目标有多个数据时,任意一个改变可能都会出发,具体的出发策略可以按需设定。

第二种情况:由客户主动调用。可以保证在合适的时间进行触发,但是同时也给客户增加了负担。

以上情况都要视具体情况而定。

实现(简单的实现了推模型):https://code.csdn.net/snippets/2597707


扩展:在游戏服务器框架中经常会出现观察者模式或其变种。例如:服务器基本功能模块”触发器”,还有服务器的消息机制。都是通过注册监听,然后改变触发等过程来实现

的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值