Java Q&A: 使用Observer模式
A:我想在自己的Java程序中使用Observer模式。基于此,能否提供某些示例代码来演示如何去做?
Q:正如面向对象编程有助于代码复用一样,设计模式可以促进设计复用。确实,设计模式可以让你复用那些正确的、成熟的设计。但近来,批评设计模式的声音越来越多。批评者指出,缺乏经验的开发者会很容易地掉进 "模式陷阱" 之中。
模式陷阱让缺乏经验的开发者迷失了方向。因而,他们在处理问题时不是去寻找可能存在的最好方案,而把最终目标集中在尽可能地实现更多的设计模式之上。在一些人看来,使用设计模式好象必然会带来良好的设计。按照这个逻辑,只要大量使用设计模式,就必然为你产生一个优秀的设计!然而现实中,这一观点却导致出许多毫无意义的设计--即使这个设计采用了多个设计模式。看来很遗憾,设计模式并不能保证良好的设计。
要想在设计中正确地运用一个设计模式,必须确保三个条件:
1. 弄清你的问题
2. 了解这个模式
3. 理解这个模式如何解决你的问题
首先,最重要的是条件1。如果不能完全地弄清你要解决的问题,何谈运用模式?
还要知道条件2:必须完全了解你想运用的模式。不了解它怎么能运用它?更重要的是,连一个模式做什么都不知道,又如何想到去用它?
最后一点,如果你不能清楚地说出模式将怎样解决你的问题(为什么这个模式合适),那还是放弃它。仅仅为了用模式本身而去用它,就会掉进模式陷阱之中。
我并不是在说提这个问题的读者也一定会掉进模式陷阱。但从提问的表达上来看,它很容易误导一些开发者去理解设计模式。我对这个提问的理解是,这位读者应该清楚自己需要解决的问题,也了解Observer模式,他/她只是不知道如何用Java来实现。
在给出一个Java示例之前,为了有助于其他读者也能理解,先简要介绍一下Observer模式。
简单来说,Observer模式让一个对象(观察者,Observer)去监视另一个对象(目标,Subject);它使得目标和观察者之间建立一种 "发布--订阅"(publish-subscribe )的关系。通过Observer模式,观察者可以向目标登记,表明自己要从目标接收事件。目标需要向观察者通知事件时,只是简单地将事件发给每一个观察者。
例如,有一个基于某种数据模型的电子表格。只要数据模型发生变化,电子表格就需要更新表格单元以及内嵌的图表。这个例子中,目标是数据模型,观察者是表格单元和图表。当观察者接收到数据模型已经变化的通知时,它们就更新自己。
Java Q&A: 使用Observer模式(转)
时间: 2024-10-29 18:34:26
Java Q&A: 使用Observer模式(转)的相关文章
Java设计模式之观察者模式(Observer模式)介绍_java
Java深入到一定程度,就不可避免的碰到设计模式(design pattern)这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广泛,遵循一定的编程模式,才能使自己的代码便于理解,易于交流,Observer(观察者)模式是比较常用的一个模式,尤其在界面设计中应用广泛,而本教程所关注的是Java在电子商务系统中应用,因此想从电子商务实例中分析Observer的应用. 虽然网上商店形式多样,每个站点有自己的特色,但也有其一般的共性,单就"
Java Q&;amp;A: 使用Factory Method模式(转)
Java Q&A: 使用Factory Method模式Q: 阅读 "Polymorphism in its purest form" 一文时,我看到了一个不熟悉的术语 "Factory method".你能解释一下什么是Factory method并说明如何使用它吗?A: Factory method(工厂方法)只不过是实例化对象的一种方法的名称.就象工厂一样,Factory method的任务是创建--或制造--对象.让我们看一个例子.每个程序要有一种报
Java设计模式之Observer模式
Observer模式也叫观察者模式,是由GoF提出的23种软件设计模式的一种.Observer模式是行为模式之一,它的作用是当一个对象的状态发生变化时,能够自动通知其他关联对象,自动刷新对象状态. 本文介绍设计模式中的(Observer)模式的概念,用法,以及实际应用中怎么样使用Observer模式进行开发. Observer模式的概念 Observer模式是行为模式之一,它的作用是当一个对象的状态发生变化时,能够自动通知其他关联对象,自动刷新对象状态. Observer模式提供给关联对象一种同
设计模式之观察者(Observer)模式与其C++通用实现(下)
我们在<设计模式之观察者(Observer)模式与其C++通用实现(中)>一文中给出了一个以C++语言实现的通用观察者模式方案骨架.然而,实际的工程项目需求往往要比理想状态复杂得多,此篇便是与读者一起探讨在现实世界中可能遇到的各种棘手问题及解决方案. 我把目前为止我所遇到的问题罗列如下: 复合主题 多线程 更新方法修改观察者链表 接下来我们一一给予讨论. (一)复合主题 考虑GUI的组件设计,我习惯用Widget类代表之,它需要处理许多用户交互以及系统事件,其中最常见的用户交互事件有鼠标及键盘
observer模式
观察器(Observer)范式解决的是一个相当普通的问题:由于某些对象的状态发生了改变,所以一组对象都需要更新,那么该如何解决?在Smalltalk的MVC(模型-视图-控制器)的"模型-视图"部分中,或在几乎等价的"文档-视图结构"中,大家可以看到这个问题.现在我们有一些数据("文档")以及多个视图,假定为一张图(Plot)和一个文本视图.若改变了数据,两个视图必须知道对自己进行更新,而那正是"观察器"要负责的工作.这是一种
在J2EE中实现Observer模式
引言: 设计模式是经验的文档化.它是对被用来在特定场景下解决一般设计问题的类和相互通信 的对象的描述.更通俗的来说,它是一个问题/解决方案对.一旦我们掌握了设计模式,就等 于拥有了一支强有力的专家队伍.它甚至能够使面向对象的新手利用前人的经验找出职责明 确的类和对象,从而获得优雅的解决方案.由于设计模式也是重构的目标,如果在设计的初 期适当地引入设计模式,可以减少重构的工作量. 但是,我们也不能陷入模式的陷阱,为了使用模式而去套模式,那样会陷入形式主义.我 们在使用模式的时候,一定要注意模式的意
Observer模式深度探索
server [简介]微软顶级技术大师Jeffrey Richter的作品,一向是不容错过的.为了帮助开发者这篇专论Observer模式的文章也不例外.Observer模式是经典设计模式中应用最为广泛也最为灵活多变的模式之一.本文在.NET技术框架下深入发掘了Observer模式的内涵,值得细细品味. 虽然设计模式并不是万能丹,但确实是一个非常强大的工具,开发人员或架构师可使用它积极地参与任何项目.设计模式可确保通过熟知和公认的解决方案解决常见问题.模式存在的事实基础在于:大多数问题,可能已经有
设计模式的解析和实现(C++)之十五-Observer模式
作用: 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新. UML结构图: 解析: Observer模式定义的是一种一对多的关系,这里的一就是图中的Subject类,而多则是Obesrver类,当Subject类的状态发生变化的时候通知与之对应的Obesrver类们也去相应的更新状态,同时支持动态的添加和删除Observer对象的功能.Obesrver模式的实现要点是,第一一般subject类都是采用链表等容器来存放Observer对象,第二
利用Observer模式实现组件间通信
1.问题的提出 以前做一个界面的时候常常会遇到这样的尴尬情况:希望保留各个独立的组件(类),但又希望它们之间能够相互通信.譬如Windows中的Explorer,我们希望鼠标点击左边是树型目录的一个节点,右边的文件浏览能及时列出该节点目录下的文件和子目录,类似这样一个简单的应用,如果只有一个类继承JFrame,而树型组件和浏览文件的面板作为成员,就像: public class MainFrame extends JFrame { JPanel treePanel; JTree tree; JP