1.实际问题
还是拿传统的订报纸业务举例吧。虽然现在看报纸的人越来越少了。现在要我们给报社做一个用,只要用户订阅了报纸,一旦有新的报纸出来了就要送给客户。用户退订了就不用送了。
老师叫我们面向对象编程,那么这个问题的对象有哪些呢?
报社:新的报纸可以当作是它的一个状态,一旦报纸有更新,就要推给用户。
用户:用户是另外一个对象。并且很明显,它依赖报社报纸的更新。只有报社里面有新的报纸它才能收到。
这个问题还有什么特殊的地方吗?对了,报社只有一个,但是用户可能有多个。这是一个典型的一对多的关系。并且他们存在依赖,报社有新的报纸,用户应该及时收到,毕竟谁也不想花钱去看过时的旧闻吧。而且用户可以随时预定,也可以随时退订。说得高端一点,就是动态改变这种依赖关系。
这个时候再引出我们的另一个设计原则,就是当年老师提了很多遍的 “高内聚,低耦合”。很显然,这两个对象之间存在千丝万缕,剪不断理还乱的依赖关系。怎么设计才能低耦合呢?
2.什么是观察者模式
观察者模式:定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都可以收到通知自动更新。
这么文邹邹的理论,看着就头疼,那还是回到我们上面将的问题。报社和客户,一家报社,多个用户,一对多吧。那谁依赖谁呢?一个用户订不订,报社都在那里开着,大不了不赚钱嘛。哈哈~~报社有新报纸,用户才有得看啊,总不能报社没出,用户先收到了报纸吧。所以这个依赖关系一定要搞明白。在这个模式里面,是多的一边依赖一的那一边。
那所谓观察者模式,谁是观察者呢?在我们的例子当中,用户,我们这些广大八卦的市民是观察者。主题也可以说是被观察者就是报社啦。
记住了,以后想到观察者模式,脑海里一定要浮现五个字:“一对多依赖”。然后就是,多的那一边是所谓的观察者。
3.代码实现
4.测试应用
上面贴出来的代码已经实现了一个简单的观察者模式了,下面来看测试代码。
测试结果:
反思: 是不是很神奇,其实用两个接口我们的问题就已经解决了。subject.setData() 一个方法就完成了我们想破头也没解决的问题。面向接口编程,Java的多态性是多么的伟大而重要啊。
相关推荐
笔记_HeadFirst设计模式
1.1 《Head First设计模式》阅读笔记.第一章 1.2 《Head First设计模式》阅读笔记.第二章 1.3 《Head First设计模式》阅读笔记.第三章 1.4 《Head First设计模式》阅读笔记.第四章 1.5 《Head First设计模式》...
Head First 设计模式_源码
HeadFirst 设计模式学习笔记2--观察者模式 demo http://blog.csdn.net/laszloyu/archive/2010/05/12/5581769.aspx
HeadFirst设计模式学习笔记比较全面详细地讲解了13个设计模式,有利于大家更好的学习HeadFirst设计模式,希望亲们会喜欢~~~
Head First 设计模式学习笔记。更多内容请参见文章内容。
head first 设计模式 比较好的书 暂时只有这些 因为后面的太大暂时传不上去,等以后应该就可以了。大家可以看看
HeadFirst设计模式 读书 笔记
head first 设计模式 观察者模式 C++ 代码
Head First设计模式(完整高清版).pdf,涵盖了各种宝贵的设计思想!
注意:5,6,7同时解压。Head.First设计模式_PDF(高清中文版)part7
经典的设计模式书籍打包:Head First 设计模式 +Java设计模式(第2版)
Head.First_设计模式_中文版_002
Head First 设计模式Head First 设计模式Head First 设计模式Head First 设计模式Head First 设计模式Head First 设计模式Head First 设计模式Head First 设计模式Head First 设计模式Head First 设计模式Head First...
head first 设计模式 高清中文版 pdf
如果你曾经读过任何一本深入浅出(Head First)系列书籍,你就会知道能够从本书中得到的是:透过丰富的视觉效果让你的大脑充分地运作。本书的编写运用许多最新的研究,包括神经生物学、认知科学以及学习理论,这使得...
Head First设计模式高清非扫描中文版.zip.002。一共三个压缩包,都上传了
Head First设计模式中文版 Head First设计模式中文版 Head First设计模式中文版
1.以主次关系介绍了24种设计模式 2.每种设计模式都详细阐述了所遵循的设计原则 HeadFirst 设计模式 walnuting_01 HeadFirst 设计模式 walnuting_02 HeadFirst 设计模式 walnuting_03 一起下载解压。