随着软考的进行,开始了新一轮设计模式的学习,距离上一次这种整体、从头到尾学习设计模式已经有一段时间了。上次整体上的学习中,主要是了解,简单的使用设计模式。随着这一段时间的接触,潜移默化,这次的学习,相对深入一些。下面我以观察者模式为例,记录一下这次设计模式的学习。(以Head First 设计模式为主要材料)。
1、复习什么是观察者模式
我们看看报纸和杂志的订阅是怎么回事:报社的业务就是出版报纸向某家报社订阅报纸,只要他们有新报纸出版,就会给你送来。只要你是他们的订户,你就会一直收到新报纸当你不想再看报纸的时候,取消订阅,他们就不会再送新报纸来只要报社还在运营,就会一直有人(或单位)向他们订阅报纸或取消订阅报纸。如果你了解报纸的订阅是怎么回事,其实就知道观察者模式是怎么回事,只是名称不太一样:出版者改称为“主题”(Subject),订阅者改称为“观察者”(Observer)。观察者模式,关系如图所示:
2、观察者模式定义
当你试图勾勒观察者模式时,可以利用报纸订阅服务,以及出版者和订阅者比拟这一切在真实的世界中,你通常会看到观察者模式被定义成:
a.观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新
b.观察者模式定义了一系列对象之间的一对多关系
c.当一个对象改变状态,其他依赖者都会收到通知
3、观察者 模式类图
当两个对象之间松耦合,它们依然可以交互,但是不太清楚彼此的细节观察者模式提供了一种对象设计,让主题和观察者之间松耦合为什么?
关于观察者的一切,主题只知道观察者实现了某个接口(也就是Observer接口)。主题不需要知道观察者的具体类是谁、做了些什么或其他任何细节。
任何时候我们都可以增加新的观察者
因为主题唯一依赖的东西是一个实现Observer接口的对象列表,所以我们可以随时增加观察者事实上,在运行时我们可以用新的观察者取代现有的观察者,主题不会受到任何影响。同样的,也可以在任何时候删除某些观察者。
我们可以独立地复用主题或观察者
如果我们在其他地方需要使用主题或观察者,可以轻易地复用,因为二者并非紧耦合。
改变主题或观察者其中一方,并不会影响另一方
因为两者是松耦合的,所以只要他们之间的接口仍被遵守,我们就可以自由地改变他们。
4.代码示例
以气象站的例子为例(例子来自head first 设计模式)
类图如下:
气象站主题代码如下
在WeatherData中实现主题接口
建立布告板代码
都建立成功之后,可以建立如下测试才程序
可以得到如下结果
总结
到目前为止,这个设计模式的学习基本上是完善了。在一次学习,也是一次补充和加深的过程,有很多以前无法理解,不好理解或者不懂的问题,在这次学习中,基本上都解决了。一次次的学习和复习,一定会有很好的效果。毕竟,学习就是反复的过程。
分享到:
相关推荐
Java设计模式——观察者模式的两种情况。
简单易懂的观察者模式
对应的博客链接:http://blog.csdn.net/t1234xy4/article/details/52432559#
浅析Java设计模式【1】——观察者!
《Android 设计模式:(二)观察者模式 —— 让你的对象知悉现况》 示例代码
《Android 设计模式:(一)观察者模式 —— 封装行为的大局观》示例代码
从中,我们就可以得出观察者模式的定义。 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己的行为...
KWIC 程序示例 事件风格 观察者模式的程序代码,使用的是Java语言。
NULL 博文链接:https://quicker.iteye.com/blog/604969
5.7 OBSERVER(观察者)—对象行为型 模式 194 5.8 STATE(状态)—对象行为型模式 201 5.9 STRATEGY(策略)—对象行为型 模式 208 5.10 TEMPLATE METHOD(模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—...
NULL 博文链接:https://quicker.iteye.com/blog/605988
对象间的联动——观察者模式,处理对象的多种状态及其相互转换——状态模式,算法的封装与切换——策略模式,模板方法模式深度解析,操作复杂对象结构——访问者模式,设计模式与足球,多人联机射击游戏中的设计模式...
16. 观察者模式(Observer Pattern) 17. 解释器模式(Interpreter Pattern) 18. 中介者模式(Mediator Pattern) 19. 职责链模式(Chain of Responsibility Pattern) 20. 备忘录模式(Memento Pattern) 21. ...
《java设计模式》课后习题及模拟试题答案
设计模式精解(Design Patterns Explained) ...如何实现关键模式——Strategy(策略)、Observer(观察者)、Bridge(桥接)、Decorator(装饰)等等。 共同点/变化点分析、设计模式以及它们如何帮助理解抽象类。
本文来自51cto,文章主要介绍了策略模式、观察者模式、装饰模式、单例模式以及饿汉模式等的相关内容。泛化=实现>组合>聚合>关联>依赖一个人(Person)可以买车(car)和房子(House),那么就可以称:Person类依赖于Car类...
22.4.1 Java世界中的观察者模式 22.4.2 项目中真实观察者模式 22.4.3 订阅发布模型 22.5 最佳实践 第23章 门面模式 23.1 我要投递信件 23.2 门面模式的定义 23.3 门面模式的应用 23.3.1 门面模式的优点 23.3.2 门面...
本书从一个新的视角描述面向对象设计,将...\r\n 如何实现关键模式——Strategy(策略)、Observer(观察者)、Bridge(桥接)、Decorator(装饰)等等。\r\n 共同点/变化点分析、设计模式以及它们如何帮助理解抽象类。
撤销功能的实现——备忘录模式(三) 撤销功能的实现——备忘录模式(四) 撤销功能的实现——备忘录模式(五) 观察者模式-Observer Pattern 对象间的联动——观察者模式(一) 对象间的联动——观察者模式(二) ...
5.7ObserverPattern(观察者模式) 236 5.7.1定义 236 5.7.2现实例子——拉登现身了 238 5.7.3C#实例——猫和老鼠 238 5.7.4C#实例——股票变化 241 5.7.5Java实例——监控系统 245 5.7.6优势和缺陷 248 ...