鸿 网 互 联 www.68idc.cn

当前位置 : 服务器租用 > .net技术 > 控件开发 > >

每天一个设计模式-8 观察者模式

来源:互联网 作者:佚名 时间:2017-09-09 08:42
每天一个设计模式-观察者模式 定义: 观察者模式定义了对象之间的一对多依赖,当一个对象状态改变时,他的所有依赖者都会收到通知并自动更新。比如报纸订阅服务: 客户订阅某种报纸,该类报纸更新时,报社将最新的报纸发送给客户。 实现: 报社要想把最新的

每天一个设计模式-观察者模式

定义:

观察者模式定义了对象之间的一对多依赖,当一个对象状态改变时,他的所有依赖者都会收到通知并自动更新。比如报纸订阅服务:

  

客户订阅某种报纸,该类报纸更新时,报社将最新的报纸发送给客户。

实现:

报社要想把最新的报纸发送给客户,就需要知道订阅的客户,即报社需要维护一个订阅客户列表;为了实现自动将更新的报纸发送给感兴趣的客户方,就得在这个列表上做文章,而java中的接口可以很好的完成这个任务,显然,这个接口需要定义一个方法来告诉所有的订阅者“有报纸更新了”。比如:定义一个接口,所有的客户都要实现这个接口,接口有一个update方法,这个方法用来告诉订阅方有新报纸出版了。报社维护着订阅客户列表,报社统一通知所有的订阅方就变得很容易实现。在这个例子中提到了报社,客户。同样在观察者模式中我们叫做目标(主题),观察者。多个观察者观察着目标,当目标状态改变时会自动通知所有的观察者,观察者做出相应的反应。

状态改变即对象产生了变化,比如:报社出版了新报纸,按钮从未点击到点击状态等。

模式讲解:

观察者模式提供了一种对象设计,让主题和观察者之间松耦合(主题不知道观察者的具体类型,也不需要知道,只知道他们都实现了一个共同的接口就可以了,主题只需对这个抽象的接口进行操作,在运行时动态的调用具体的观察者方法)。

 

拓展:

  • 观察者模式有两种类型,即“推,拉”,区别主要就是主动性问题,推:主动权在目标上,目标推给观察者什么内容,观察者就处理什么内容;拉:主动权在观察者上,当目标状态改变时,目标会把自身发送给观察者,由观察者自己选择需要什么数据。
  • java中已经内置了观察者模式,使用类似,但没有自己定义观察者模式使用灵活,并且自定义的观察者模式实现起来也不复杂。

 

转载注明出处:http://www.cnblogs.com/xiemubg/p/6740811.html

 

网友评论
<