设计模式学习笔记-观察者模式教程方案.docxVIP

设计模式学习笔记-观察者模式教程方案.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
?学习设计模式已经有段时间了,这是总结的第一篇博客,文中有错误、漏洞之处,望各位支出,改正。?????????????????????????观察者模式? ? ? ??一、基本定义? ? ? ??何谓观察者模式?观察者模式定义了对象之间的一对多依赖关系,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并且自动更新。? ? ? ??在这里,发生改变的对象称之为观察目标,而被通知的对象称之为观察者。一个观察目标可以对应多个观察者,而且这些观察者之间没有相互联系,所以么可以根据需要增加和删除观察者,使得系统更易于扩展。? ? ? ??观察者模式又称为发布-订阅模式。? ? ? ??二、基本结构? ? ? ??首先先看观察者模式的UML类图。? ? ? ??分析:? ? ? ? ? ?Subject:目标。他把所有对观察者对戏的引用保存在一个聚集里,每一个主题都可以有多个观察者。? ? ? ? ? ?Observer:观察者。为所有的具体观察者定义一个接口,在得到主题的通知时能够及时的更新自己。? ? ? ? ? ?ConcreteSubject:具体主题。将有关状态存入具体观察者对象。在具体主题发生改变时,给所有的观察者发出通知。? ? ? ? ? ?ConcreteObserver:具体观察者。实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题状态相协调。? ? ? ??三、实现观察者模式? ? ? ??情景是这样的:在气象观测站中,它能够追踪目前的天气状况,包括温度、适度、气压。需要实现一个布告板,能够分别显示目前的状态,气象统计和简单的预报。当气象站中获取最新的测量数据时,三种布告板必须实时更新。? ? ? ??下面是这个案例的设计图:? ? ? ??编码实现:? ? ? ??主题接口 ? Subject.java[java]?view plaincopyprint?public?interface?Subject?{??????/**??????*?注册观察者??????*?@param?observer??????*/??????public?void?registerObserver(Observer?observer);????????????/**??????*?删除观察者??????*?@param?observer??????*/??????public?void?removeOberver(Observer?observer);????????????/**??????*?当主题状态发生改变时,这个方法需要被调用,以通知所有观察者??????*/??????public?void?notifyObserver();??}??? ? ? ??观察者接口 ?Observer.java[java]?view plaincopyprint?public?interface?Observer?{??????public?void?update(float?temp,float?humidity,float?pressure);??}??? ? ? ??布告板显示接口 DisplayElement.java[java]?view plaincopyprint?public?interface?DisplayElement?{??????public?void?display();??}??? ? ? ??WeatherData实现主题接口 WeatherData.java[java]?view plaincopyprint?public?class?WeatherData?implements?Subject{??????private?ListObserver?observers;??????private?float?tempterature;??????private?float?pressure;??????private?float?humidity;????????????public?WeatherData(){??????????observers?=?new?ArrayListObserver();??????}????????????@Override??????public?void?notifyObserver()?{??????????for(int?i?=?0;?i??observers.size();i++){??????????????Observer?observer?=?observers.get(i);??????????????observer.update(tempterature,?humidity,?pressure);??????????}??????}??

文档评论(0)

a336661148 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档