- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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()?{?
您可能关注的文档
- 人教版教学人体内环境与稳态免疫调节第二课时概述.ppt
- 人教版九年级化学《水的组成》概述.ppt
- 人教版九年级化学《物质的变化和性质》(用)概述.ppt
- 羊毛衫设计学案.ppt
- 人教版九年级化学第11单元生活中常见的盐概述.ppt
- 人教版九年级化学第十单元2概述.ppt
- 羊膜在眼科临床中应用学案.ppt
- 人教版九年级化学第十一单元一生活中常见的盐概述.ppt
- 人教版九年级化学水的组成概述.ppt
- 羊奶的好处学案.ppt
- 戏曲知识培训方案课件.pptx
- 2025年医学分析-2023年登革热诊治(新).docx
- 2025年医学分析-2023年天津副高(肿瘤学)考试真题卷(7).docx
- 黄土地黑土地课件.pptx
- 2025年医学分析-2022-2023年注册岩土工程师《岩土专业案例》考前冲刺卷②(解析9.docx
- 甜菜农艺知识培训课件.pptx
- 浙江省台州市三门县2023-2024学年第一学期三年级科学期中检测卷(含答案).pdf
- 浙江省台州市三门县2023-2024学年第一学期三年级科学期中检测卷(含答案).docx
- 戏曲知识培训内容课件.pptx
- 2025年医学分析-2022春季内蒙医教-全员专项继教培训-一类学分5分.docx
文档评论(0)