- 浏览: 83447 次
- 性别:
- 来自: 深圳
最新评论
-
月亮不懂夜的黑:
[color=orange][/color][/color][ ...
二叉树的深度优先和广度优先遍历 -
月亮不懂夜的黑:
<font color='re ...
二叉树的深度优先和广度优先遍历 -
zhufeng1981:
...
正在为理想而奋斗的程序员进来看看
观察者模式要点:
1.观察者模式定义了对象之间一对多的关系
2.主题(也就是可观察者)用一个共同的接口来更新观察者
3.观察者和可观察者之间用松耦合方式,可观察者不知道观察者的细节,只知道观察者实现了观察者接口
4.使用此模式时,你可从被观察者处推或拉数据
5.有多个观察者时,不可以以来特定的通知次序
6.java有多种观察者模式的实现,包括通用的java.util.Observable
7.要注意java.util.Observable实现上所来来的一些问题
8.Swing大量使用观察者模式,许多GUI框架也是如此
9.此模式也被应用在许多地方,例如:JavaBean、RMI
观察者模式:在对象之间定义一对多的依赖,这样一来,档一个对象改变状态,依赖它的对象都会收到通知,并自动更新。
结构总结:从具体主题角色指向抽象观察者角色的合成关系,代表具体主题对象可以有任意多个对抽象观察者对象的引用。之所以使用抽象观察者而不是具体观察者,意味着主题对象不需要知道引用了哪些ConcreteObserver类型,而只知道抽象Observer类型。这就使得具体主题对象可以动态地维护一系列的对观察者对象的引用,并在需要的时候调用每一个观察者共有的Update()方法。这种做法叫做"针对抽象编程"。
观察者模式的优缺点:
Observer模式的优点是实现了表示层和数据逻辑层的分离,并定义了稳定的更新消息传递机制,类别清晰,并抽象了更新接口,使得可以有各种各样不同的表示层(观察者)。但是其缺点是每个外观对象必须继承这个抽像出来的接口类,这样就造成了一些不方便,比如有一个别人写的外观对象,并没有继承该抽象类,或者接口不对,我们又希望不修改该类直接使用它。虽然可以再应用Adapter模式来一定程度上解决这个问题,但是会造成更加复杂烦琐的设计,增加出错几率。
观察者模式的效果有以下几个优点:
(1)观察者模式在被观察者和观察者之间建立一个抽象的耦合。被观察者角色所知道的只是一个具体现察者聚集,每一个具体现察者都符合一个抽象观察者的接口。被观察者并不认识任何一个具体观察者,它只知道它们都有一个共同的接口。由于被观察者和观察者没有紧密地耦合在一起,因此它们可以属于不同的抽象化层次。
(2)观察者模式支持广播通信。被观察者会向所有的登记过的观察者发出通知。
观察者模式有下面的一些缺点:
(1)如果一个被观察者对象有很多直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。
(2)如果在被观察者之间有循环依赖的话,被观察者会触发它们之间进行循环调用,导致系统崩溃。在使用观察考模式时要特别注意这一点。
(3)如果对观察者的通知是通过另外的线程进行异步投递的话,系统必须保证投递是以自恰的方式进行的。
(4)虽然观察者模式可以随时使观察者知道所观察的对象发生了变化,但是观察者模式没有相应的机制使观察者知道所观察的对象是怎么发生变化
public interface Subject { public void register(Observer observer); public void remove(Observer observer); public void notifiedObserver(); }
public interface Observer { public void update(float temp, float humidity, float pressure); }
import java.util.*; public class WeatherDate implements Subject { private float temp; private float humidity; private float pressure; List list = new ArrayList(); public void register(Observer observer) { list.add(observer); } public void remove(Observer observer) { int i = list.indexOf(observer); if (i >= 0) { list.remove(i); } } public void notifiedObserver() { for (int i = 0; i < list.size(); i++) { Observer observer = (Observer) list.get(i); observer.update(temp, humidity, pressure); } } public void changeDate() { notifiedObserver(); } public void setMeasure(float temp, float humidity, float pressure) { this.temp = temp; this.humidity = humidity; this.pressure = pressure; changeDate(); } }
public class CurrentConditionsDisplay implements Observer { private float temp; private float humidity; private float pressure; private WeatherDate wd ; public CurrentConditionsDisplay(WeatherDate wd){ this.wd = wd; wd.register(this); } public void update(float temp, float humidity, float pressure) { this.temp = temp; this.humidity = humidity; this.pressure = pressure; display(); } public void display(){ System.out.println("Current condition:"+ temp+"F degrees and" +humidity +"%humidty"); } }
public class WeatherStation { public static void main(String[] args) { WeatherDate weatherdate = new WeatherDate(); CurrentConditionsDisplay condition = new CurrentConditionsDisplay( weatherdate); weatherdate.setMeasure(80, 65, 70); } }
发表评论
-
不错的经典算法java和c两种实现(含代码图文解释)(转)
2010-03-05 20:55 1455通过Java C语言分别实现各种算法,图文并茂,描述很详细! ... -
MyEclipse配置Tomcat(图解)
2009-11-24 10:14 18731) 安装完MyEclipse 后 ... -
Apache的80端口被占用【文章教程】
2009-11-24 10:13 2758哎呀!~今天突然发现我的APMserv启动时发现Apache的 ... -
Spring学习笔记之bean和BeanFactory
2009-11-12 21:27 01.bean定义和bean实例化 bean ... -
Spring学习笔记之依赖注入(更新中)
2009-11-12 20:45 938Spring为企业应用开发提供一个轻量级的解决方案。该 ... -
65个源代码网站
2009-11-07 20:28 16131.51源码:http://www.51aspx.com/ ... -
归并排序
2009-10-21 10:50 765http://yuan.iteye.com/blog/3087 ... -
Swing编程总结
2009-09-04 19:49 0为了显示一个窗口,每 ... -
java 输入流与输出流相关知识
2009-09-04 10:31 2949流是生产或消费信息的一种抽象描述,通过java的输入 ... -
线程相关知识
2009-08-27 14:45 766进程本质上是一个执行的程序。每个进程都有自己独立的一块内存空间 ... -
国外开源软件网站-收
2009-08-08 08:02 1527sourceforge http://www.sourcefo ... -
JSP指令之page指令
2009-08-07 21:40 1583page指令用于为容器提供指示,这些指示将应用于当 ... -
JSP指令基础
2009-08-07 20:37 951JSP指令不是JSP代码中逻辑的一部分。相反,JS ... -
不错的设计模式学习网站
2009-08-07 08:55 752http://www.riabook.cn/doc/desig ... -
23种设计模式
2009-08-05 21:30 8861、工厂模式:客户类和 ... -
head first 设计模式之代理模式之总结
2009-08-05 15:32 0代理模式要点: ... -
head first 设计模式之策略模式之总结
2009-08-05 14:07 0策略模式的要点: 1、Strategy及其子类为组件提 ... -
head first 设计模式之状态模式之总结
2009-08-05 09:31 1279状态模式要点: ... -
开发人员一定要加入收藏夹的网站
2009-08-02 21:24 704http://www.gotapi.com/语言: ... -
Head First 设计模式之单件模式之总结
2009-08-02 15:40 1064单件模式要点: 1.单件模式确保程序中一个类最多只有 ...
相关推荐
在Head First的设计模式系列书籍中,作者通过易懂且生动的方式介绍了观察者模式。观察者模式的核心思想是“发布-订阅”机制,它将观察目标(被观察者)和观察者(订阅者)解耦,使得两者可以独立地变化。这种模式的...
《Head First 设计模式》与《Java设计模式(第2版)》是两本非常重要的IT书籍,专注于软件开发中的设计模式。设计模式是解决软件设计中常见问题的经验总结,它们提供了一种标准的方法来处理特定场景下的问题,使得代码...
总的来说,HeadFirst设计模式的学习笔记2关于观察者模式的演示,旨在帮助开发者理解如何使用观察者模式来构建可扩展的系统。通过实际的代码示例,我们可以更深入地掌握这一模式,并将其应用到日常开发中,提升代码的...
观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。 Observer Pattern defines a one-to-many dependency between objects so that when one object ...
《Headfirst设计模式》是一本深受开发者欢迎的设计模式学习书籍,尤其对于初学者而言,其独特的教学方式使得复杂的概念变得易于理解。这本书以其高清的中文版PDF格式提供,结合书中源码,为读者提供了深入实践的可能...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多...在`head first 设计模式`的讲解中,读者将能深入理解如何在C++中有效地应用观察者模式,并掌握其在实际项目中的使用技巧。
《Head First 之观察者模式》是一本深入浅出介绍观察者模式的书籍,通过生动有趣的方式帮助读者理解和掌握这一设计模式。观察者模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生...
《Head-First设计模式》是一本面向初学者的优秀设计模式教程,主要针对Java编程语言。...《Head-First设计模式》以其独特的教学方式,使得这些复杂的概念变得生动易懂,是每一位Java程序员进阶的必读之作。
《HeadFirst设计模式》是一本深受开发者欢迎的书籍,它以独特、易理解的方式介绍了软件设计中的重要概念——设计模式。设计模式是经验丰富的开发者在解决常见问题时总结出的最佳实践,它们为软件设计提供了可复用的...
总的来说,这个压缩包包含的资源可以帮助你深入理解设计模式,通过《HeadFirst设计模式》和《HeadFirst in Java》的源码,你可以学习到如何在实际项目中应用这些模式。而UML类图则提供了直观的视角,便于你把握设计...
《Head First 设计模式》的英文版是一本面向初学者的设计模式入门书籍,它以幽默风趣的文风,深入浅出地介绍了软件设计中经常使用的设计模式。设计模式是一套被反复使用、多数人知晓、经过分类编目、代码设计经验的...
《HeadFirst设计模式源代码》是一本面向程序员的深度学习设计模式的书籍,它通过直观易懂的方式将复杂的概念转化为生动的图像和有趣的例子,帮助读者深入理解并掌握设计模式。设计模式是软件工程中的一种最佳实践,...
总的来说,《Head First 设计模式》是一本值得反复研读的经典之作,它以直观易懂的方式引导读者探索设计模式的世界,无论你是初入编程殿堂的新手,还是经验丰富的开发者,都能从中受益匪浅。下载这本书的PDF版本,你...
《Head First设计模式》是一本深受开发者欢迎的设计模式教程,以其独特的视觉呈现方式和易于理解的语言,让初学者也能快速掌握设计模式的核心概念。这本书深入浅出地介绍了23种GOF(GoF,Gamma、Erich、Johnson、...
《Head First Design Patterns》是一本深入浅出介绍设计模式的图书,由Eric Freeman、Elisabeth Freeman、Bert Bates和Kathy Sierra联合编写。本书结合认知科学原理和神经生物学研究,采用引导式教学方法,通过故事...
《HeadFirst设计模式JAVA版源码》是一份深入学习设计模式的重要资源,它基于流行的编程语言Java,旨在帮助开发者理解并应用设计模式于实际项目中。设计模式是软件工程中的重要概念,它代表了在特定场景下解决问题的...
《Head First设计模式》是一本深受开发者喜爱的经典书籍,它以独特、生动的方式讲解了设计模式这一核心的软件工程概念。设计模式是经验丰富的开发者在解决常见问题时总结出的最佳实践,它们为软件设计提供了可复用的...
《Head First 设计模式》是一本非常受欢迎的软件设计书籍,它以易懂且生动的方式介绍了23种经典的GOF设计模式。这本书的源代码包含了书中所有示例的实现,对于学习和理解设计模式有着极大的帮助。源代码的下载使得...
《HeadFirst设计模式》是设计模式领域的一本经典著作,以其独特的教学方式和生动的插图深受初学者喜爱。这本书通过实例和互动式的学习方法,深入浅出地讲解了23种经典的设计模式。源代码作为理论知识的实践部分,...
《Head First设计模式》是软件开发领域的一本经典著作,主要介绍了面向对象设计中的各种模式。这本书通过生动、直观的方式,使读者能够更好地理解和应用设计模式。源代码是书中理论知识的具体实现,可以帮助读者深入...