设计模式之观察者模式(Observer Pattern)
2014-09-10 09:48
337 查看
一.什么是观察者模式?
把现实世界中的报纸与订阅者的关系抽象出来就是观察者模式,一种报纸对应多个订阅者,订阅者可以随时解除订阅,未订阅的读者也可以随时开始订阅。一旦有新报纸发布,所有的订阅者都会收到新内容。
在观察者模式中,报纸叫做主题Subject,订阅者叫做观察者Observer,一个Subject可以被多个Observer关注,Observer可以随时解除关注,新的Observer也可以随时关注Subject。Subject内容发生改变时,会通知所有的Observer。
二.举个例子
很多网络游戏中都有答题活动,所有参与答题活动的玩家都会同时收到题目信息(延迟忽略不计),未参与活动的玩家可以中途加入,正在答题的玩家也可以随时退出。
在此例中,游戏服务器就是“一”,玩家是“多”,题目信息就是在它们之间传递的消息。
怎样才能设计出满足以上要求的类?不妨试试观察者模式。
首先,定义Subject抽象类:
注意,这里用了抽象类而没有用接口,为什么?
因为Subject的行为是fixed的,并不需要由子类来扩展。
-------
类似的,我们定义Observer抽象类:
-------
下面开始实现我们的自定义Subject——GameServer:
P.S.GameServer类的成员变量Question是对题目信息的简单封装,Question类包含题号no与题目内容content两部分定义,以及一个toString方法,返回题目描述信息
-------
再实现我们的自定义Observer——Player:
P.S.为了使类层次更加清晰,此处并没有定义Player基类
很容易复制粘贴得到PlayerB与PlayerC,不再赘述
至此,我们的模拟答题活动准备工作已经结束了,下面我们需要定义一个测试类来展示观察者模式的魅力。
三.效果示例
定义如下Test类:
结果示例:
四.总结
从上面的例子可以看出观察者模式的特点:
1.利用观察者模式可以轻易地建立对象之间“一对多”的依赖关系
2.利用观察者模式的机制可以很容易的实现这种依赖关系的动态维护
把现实世界中的报纸与订阅者的关系抽象出来就是观察者模式,一种报纸对应多个订阅者,订阅者可以随时解除订阅,未订阅的读者也可以随时开始订阅。一旦有新报纸发布,所有的订阅者都会收到新内容。
在观察者模式中,报纸叫做主题Subject,订阅者叫做观察者Observer,一个Subject可以被多个Observer关注,Observer可以随时解除关注,新的Observer也可以随时关注Subject。Subject内容发生改变时,会通知所有的Observer。
二.举个例子
很多网络游戏中都有答题活动,所有参与答题活动的玩家都会同时收到题目信息(延迟忽略不计),未参与活动的玩家可以中途加入,正在答题的玩家也可以随时退出。
在此例中,游戏服务器就是“一”,玩家是“多”,题目信息就是在它们之间传递的消息。
怎样才能设计出满足以上要求的类?不妨试试观察者模式。
首先,定义Subject抽象类:
因为Subject的行为是fixed的,并不需要由子类来扩展。
-------
类似的,我们定义Observer抽象类:
下面开始实现我们的自定义Subject——GameServer:
-------
再实现我们的自定义Observer——Player:
很容易复制粘贴得到PlayerB与PlayerC,不再赘述
至此,我们的模拟答题活动准备工作已经结束了,下面我们需要定义一个测试类来展示观察者模式的魅力。
三.效果示例
定义如下Test类:
四.总结
从上面的例子可以看出观察者模式的特点:
1.利用观察者模式可以轻易地建立对象之间“一对多”的依赖关系
2.利用观察者模式的机制可以很容易的实现这种依赖关系的动态维护
相关文章推荐
- 设计模式17:Observer Pattern (观察者模式)
- .NET设计模式(19):观察者模式(Observer Pattern)
- Java设计模式—观察者模式(Observer pattern)
- 极速理解设计模式系列:2.观察者模式(Observer Pattern)
- .NET设计模式(19):观察者模式(Observer Pattern)
- .NET设计模式:观察者模式(Observer Pattern)
- 设计模式之观察者模式(Observer Pattern)(二)
- 乐在其中设计模式(C#) - 观察者模式(Observer Pattern)
- Java设计模式—观察者模式(Observer pattern)
- 深入浅出设计模式-002:观察者模式(Observer Pattern)
- .NET设计模式(19):观察者模式(Observer Pattern)
- Net设计模式实例之观察者模式(Observer Pattern)
- 我读设计模式之观察者模式(Observer Pattern)
- .NET设计模式-观察者模式(Observer Pattern)
- Head First 设计模式——观察者模式(Observer Pattern)——Python实现(2)
- 设计模式之观察者模式(Observer Pattern)(一)
- Net设计模式之观察者模式(Observer Pattern)(1)
- 设计模式学习笔记--Observer Pattern观察者模式
- Head First 设计模式——观察者模式(Observer Pattern)——Python实现(3)
- Head First 设计模式——观察者模式(Observer Pattern)——Python实现(1)