设计模式学习笔记-观察者模式概述.docxVIP

  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? 1. public?interface?Subject?{?? 2. ????/**? 3. ?????*?注册观察者? 4. ?????*?@param?observer? 5. ?????*/?? 6. ????public?void?registerObserver(Observer?observer);?? 7. ?????? 8. ????/**? 9. ?????*?删除观察者? 10. ?????*?@param?observer? 11. ?????*/?? 12. ????public?void?removeOberver(Observer?observer);?? 13. ?????? 14. ????/**? 15. ?????*?当主题状态发生改变时,这个方法需要被调用,以通知所有观察者? 16. ?????*/?? 17. ????public?void?notifyObserver();?? 18. }?? ? ? ? ??观察者接口 ?Observer.java [java]?view plaincopyprint? 1. public?interface?Observer?{?? 2. ????public?void?update(float?temp,float?humidity,float?pressure);?? 3. }?? ? ? ? ??布告板显示接口 DisplayElement.java [java]?view plaincopyprint? 1. public?interface?DisplayElement?{?? 2. ????public?void?display();?? 3. }?? ? ? ? ??WeatherData实现主题接口 WeatherData.java [java]?view plaincopyprint? 1. public?class?WeatherData?implements?Subject{?? 2. ????private?ListObserver?observers;?? 3. ????private?float?tempterature;?? 4. ????private?float?pressure;?? 5. ????private?float?humidity;?? 6. ?????? 7. ????public?WeatherData(){?? 8. ????????observers?=?new?ArrayListObserver();?? 9. ????}?? 10. ?????? 11. ????@Override?? 12. ????public?void?notifyObserver()?{?

文档评论(0)

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

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

1亿VIP精品文档

相关文档