设计模式之观察者模式

来源:互联网 发布:女流66 知乎 编辑:程序博客网 时间:2024/04/26 04:47

 在游戏中,玩家登录的时候通常需要做很多事情,比如更新帮派在线列表,更新好友在线列表,游戏中还不时有些节日活动,这些活动可能也需要登录时做一些检查,所以登录函数通常会是这个样子:

上面这些函数调用可能会经常变换,比如情人节到了,要加上情人节活动的登录检查;春节过了,要把春节活动的登录检查去掉等等。结果就是TUser的Login函数被一次次的改来改去,每个模块只要希望知道玩家上线的消息就会往里面塞自己的函数调用。有一个很简单却有效的方法可以解决这个问题:

这样以后想增加登录检查就不用改TUser的Login函数了,这就是所谓的观察者模式,它的定义:

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

很简单吧,在上例中就是各个模块都希望知道玩家登录事件,希望玩家登录时能被通知到;用观察者模式可以实现这个目标,并动态增删观察者而不需要修改被观察者的任何代码。再看看它的适用性:

1.当一个抽象模型有两个方面, 其中一个方面依赖于另一方面。将这二者封装在独立的对象中以使它们可以各自独立地改变和复用。

2.当对一个对象的改变需要同时改变其它对象, 而不知道具体有多少对象有待改变。

3.当一个对象必须通知其它对象,而它又不能假定其它对象是谁。换言之, 你不希望这些对象是紧密耦合的。

原创粉丝点击