- 浏览: 296617 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (176)
- Algorithm (4)
- Diary (9)
- GIS-RS-GPS (15)
- Hibernate (1)
- JavaSE (4)
- 其他开源 (0)
- 架构与设计 (4)
- Web 客户端技术 (21)
- Web 框架与开发 (6)
- ArcEngine 开发 (2)
- ArcGIS Server 开发 (0)
- ArcIMS 开发 (3)
- 空间数据库 (0)
- Eclipse Plugin (1)
- Eclipse Framework (0)
- GIS-GPS-RS (0)
- [网站分类]1.网站首页原创Java技术区(对首页文章的要求: 原创、高质量、经过认真思考并精心写作。BlogJava管理团队会对首页的文章进行管理。) (54)
- [网站分类]2.Java新手区 (10)
- [网站分类]3.非技术区 (8)
- [网站分类]4.其他技术区 (19)
- [网站分类]6.转载区(Java技术文章转载, 请注明原文出处) (8)
最新评论
-
wen0301:
认同! 程序员必须锻炼内功,而不是华丽的花拳绣腿。
Google的Offer -
leelight:
我用了凸角圆弧法,发现此算法在半径相对较大时,输入结果经常是一 ...
GIS 缓冲区应用及算法实现 -
palmer:
据说 Google 有中国本地的服务器.有没有这方面的原因?? ...
地震为什么没有影响到 Google -
chxkyy:
跑getShapefileFeatureClass方法
AE92 SDK for Java 最小示例学习 -
chxkyy:
我在本地跑这个代码怎么报这个错:java.lang.Unsat ...
AE92 SDK for Java 最小示例学习
[Design Pattern] The Observer Pattern
作者:Flyingis
在讨论设计模式时,我喜欢用英文名来称呼各种模式,觉得这样会更为准确一些。设计模式在Java开发领域已经是炙手可热的山芋,披上了这件战袍,似乎就可以在程序设计中立于不败之地,不仅可以规范自己的武功招式,还能够看清其他高手的武功套路。在接下来[Design Pattern]一系列的随笔中,我将系统的研究各种常用的设计模式,主要的参考资料是《Head First Design Patterns》,主要的思路是,介绍基本概念(虽然做Java开发的熟手已经对此熟悉的不得了),将思维转换为代码设计,谈谈在实际中开发的应用,也许还会有各种模式的弊端。
Observer模式是常用的几种设计模式之一,其主要组成部分有:一组关注事件发生的对象,当事件发生时对象应该做的具体事情,以及决定对象参与或退出关注事件行为的控制器。注意,现在不要站在软件设计的角度上来考虑前面的这些名词,站在生活的角度上来看待会更为恰当。《Head First Design Patterns》中介绍的例子通俗易懂,老板决定哪些人成为他某个项目组的员工,去参与某个项目的开发,当然他也可以将某员工从项目组中调离出来,或是开除。在这个过程中,员工就是关注事件发生的对象,某个项目的开发即员工应该做的具体事情,老板拥有控制与调度的权利。
Observer在程序设计中使用最为广泛是事件响应机制。列举《Ajax in Action》中的一段代码:
其中,关注事件发生的对象是lsnr,被保存在一系列的数组lsnrs中。事件产生时应该做的具体事情在notify方法体现。控制器则是removeListener和addListener来完成,它们决定需要哪些对象来关注事件的发生(这里说的“对象”仍然是广义的,非面向对象中的“对象”)。这样就完成了一个简单的JavaScript事件响应的设计,遵循的是Observer设计模式。
Java API内建了一些接口、类来帮助实现Observer模式,具体可以参考java.util包中的Observer接口和Observable类。
Observer模式在软件设计中使用的非常广泛,在事件响应、对象监控、动态响应等领域具有重要的实际应用价值,除此之外,它还可以有效帮助软件设计向Loosely Coupled Design方向发展,降低模块之间的耦合,顺应软件设计发展的潮流。但是,对于一个简单的,对扩展性没有太多要求的应用而言,刻意在应用中引入Observer模式,只会增加代码量,对软件的快速开发和效率提升没有任何好处,还不如将代码写的简单易懂更好。
在讨论设计模式时,我喜欢用英文名来称呼各种模式,觉得这样会更为准确一些。设计模式在Java开发领域已经是炙手可热的山芋,披上了这件战袍,似乎就可以在程序设计中立于不败之地,不仅可以规范自己的武功招式,还能够看清其他高手的武功套路。在接下来[Design Pattern]一系列的随笔中,我将系统的研究各种常用的设计模式,主要的参考资料是《Head First Design Patterns》,主要的思路是,介绍基本概念(虽然做Java开发的熟手已经对此熟悉的不得了),将思维转换为代码设计,谈谈在实际中开发的应用,也许还会有各种模式的弊端。
Observer模式是常用的几种设计模式之一,其主要组成部分有:一组关注事件发生的对象,当事件发生时对象应该做的具体事情,以及决定对象参与或退出关注事件行为的控制器。注意,现在不要站在软件设计的角度上来考虑前面的这些名词,站在生活的角度上来看待会更为恰当。《Head First Design Patterns》中介绍的例子通俗易懂,老板决定哪些人成为他某个项目组的员工,去参与某个项目的开发,当然他也可以将某员工从项目组中调离出来,或是开除。在这个过程中,员工就是关注事件发生的对象,某个项目的开发即员工应该做的具体事情,老板拥有控制与调度的权利。
Observer在程序设计中使用最为广泛是事件响应机制。列举《Ajax in Action》中的一段代码:
/**/
/*
命名空间对象
*/
var jsEvent = new Array();
/**/ /*
el:DOM元素
eventType:JavaScript事件类型,如onclick、onmousemove等
*/
jsEvent.EventRouter = function (el,eventType) {
this .lsnrs = new Array();
this .el = el;
el.eventRouter = this ;
el[eventType] = jsEvent.EventRouter.callback;
}
/**/ /*
增加一个监听器
*/
jsEvent.EventRouter.prototype.addListener = function (lsnr) {
this .lsnrs.append(lsnr, true );
}
/**/ /*
去除一个监听器
*/
jsEvent.EventRouter.prototype.removeListener = function (lsnr) {
this .lsnrs.remove(lsnr);
}
/**/ /*
通知所有需要响应事件的方法,当事件产生时即调用这些方法
*/
jsEvent.EventRouter.prototype.notify = function (e) {
var lsnrs = this .lsnrs;
for ( var i = 0 ;i < lsnrs.length;i ++ ) {
var lsnr = lsnrs[i];
lsnr.call( this ,e);
}
}
/**/ /*
定义事件回调函数,this指向DOM元素
*/
jsEvent.EventRouter.callback = function (event) {
var e = event || window.event;
var router = this .eventRouter;
router.notify(e)
}
var jsEvent = new Array();
/**/ /*
el:DOM元素
eventType:JavaScript事件类型,如onclick、onmousemove等
*/
jsEvent.EventRouter = function (el,eventType) {
this .lsnrs = new Array();
this .el = el;
el.eventRouter = this ;
el[eventType] = jsEvent.EventRouter.callback;
}
/**/ /*
增加一个监听器
*/
jsEvent.EventRouter.prototype.addListener = function (lsnr) {
this .lsnrs.append(lsnr, true );
}
/**/ /*
去除一个监听器
*/
jsEvent.EventRouter.prototype.removeListener = function (lsnr) {
this .lsnrs.remove(lsnr);
}
/**/ /*
通知所有需要响应事件的方法,当事件产生时即调用这些方法
*/
jsEvent.EventRouter.prototype.notify = function (e) {
var lsnrs = this .lsnrs;
for ( var i = 0 ;i < lsnrs.length;i ++ ) {
var lsnr = lsnrs[i];
lsnr.call( this ,e);
}
}
/**/ /*
定义事件回调函数,this指向DOM元素
*/
jsEvent.EventRouter.callback = function (event) {
var e = event || window.event;
var router = this .eventRouter;
router.notify(e)
}
其中,关注事件发生的对象是lsnr,被保存在一系列的数组lsnrs中。事件产生时应该做的具体事情在notify方法体现。控制器则是removeListener和addListener来完成,它们决定需要哪些对象来关注事件的发生(这里说的“对象”仍然是广义的,非面向对象中的“对象”)。这样就完成了一个简单的JavaScript事件响应的设计,遵循的是Observer设计模式。
Java API内建了一些接口、类来帮助实现Observer模式,具体可以参考java.util包中的Observer接口和Observable类。
Observer模式在软件设计中使用的非常广泛,在事件响应、对象监控、动态响应等领域具有重要的实际应用价值,除此之外,它还可以有效帮助软件设计向Loosely Coupled Design方向发展,降低模块之间的耦合,顺应软件设计发展的潮流。但是,对于一个简单的,对扩展性没有太多要求的应用而言,刻意在应用中引入Observer模式,只会增加代码量,对软件的快速开发和效率提升没有任何好处,还不如将代码写的简单易懂更好。
发表评论
-
小议final关键字
2005-10-28 21:50 1766作者:Flyingis final是Java语言中一 ... -
多态学习心得
2005-10-31 19:28 1265作者:Flyingis 这几天我在重新复习Java语言基 ... -
Java接口特性学习
2005-11-02 21:18 1174作者:Flyingis 在Jav ... -
理解Java内部类的基本特性(一)
2005-11-04 17:11 1417作者:Flyingis 内部类是Java语言一个 ... -
理解Java内部类的基本特性(二)
2005-11-04 18:55 1289作者:Flyingis4. 内部类拥有其外围类的所有元素的访 ... -
JSF VS Tapestry 全面比较
2005-11-09 13:08 1239作者:Flyingis Java不像微软拥有Vi ... -
Hibernate学习心得--性能优化
2005-11-15 10:22 1328作者:Flyingis 在使用Hiber ... -
Struts Action的多种角色
2005-11-18 17:10 1242作者:Flyingis ... -
中国企业对软件人才利用的思考
2005-11-21 14:08 1163作者:Flyingis 刚刚看到一篇文章《中方落 ... -
关键字new和newInstance方法区别
2005-12-03 16:48 1199作者:Flyingis 在初始化一个类,生成一个 ... -
Google的Offer
2005-12-07 15:05 1297作者:Flyingis 昨 ... -
Google新服务--出行路线规划服务
2005-12-09 20:04 1503作者: ... -
浅议类型识别与反射机制
2005-12-11 14:43 980作者:Flyingis 运行时类型识别(Run- ... -
ClassCastException深入分析
2005-12-18 18:57 1190作者:Flyingis ClassCastExcep ... -
热点讨论--"Java? It's So Nineties"
2005-12-18 19:32 918作者:Flyingis贴一则消息。今天在各大网站上都 ... -
Java容器分析--List和Set
2005-12-21 15:06 820作者:Flyingis 容器类可以大大提高编程 ... -
GIS数据建库基本思想(上)
2005-12-22 18:43 1225地理信息系统的建设中,数据库的建设极为重要,基础地形 ... -
GIS数据建库基本思想(下)
2005-12-25 15:24 1330GIS数据建库基本思想(上) ... -
Java容器分析--Map
2005-12-27 10:07 1030作者:Flyingis标准的Java类库中包含了几种类 ... -
Java I/O中的设计模式
2005-12-30 21:47 985作者:Flyingis 任何程序语言的I/O设计都是一项 ...
相关推荐
它们分别是:单例模式(Singleton)、策略模式(StrategyPattern)、适配器模式(AdapterPattern)、装饰者模式(DecoratorPattern)、抽象工厂模式(AbstractFactoryPattern)、观察者模式(ObserverPattern)、...
"Design*Pattern*Framework*4.5" 可能指的是一个基于 .NET Framework 4.5 的设计模式实现或教程集合。 设计模式是经验丰富的软件开发者的智慧结晶,它们被分为三类:创建型、结构型和行为型。创建型模式涉及对象的...
在给定的“com.designpattern.state_observer.rar”压缩包中,我们可以期待找到有关“状态模式(State Pattern)”和“观察者模式(Observer Pattern)”的示例代码或教程。这两种模式都是行为设计模式,它们在处理...
在"Observer HeadFirst design pattern"中,作者通过生动的比喻和互动式的例子,帮助读者深入理解观察者模式的核心概念和实现方式。 观察者模式的核心思想是将"主题"(Subject)与"观察者"(Observer)解耦,主题...
设计模式(Design Pattern)是软件工程中的一种经验总结,它是在特定上下文中为解决常见问题而提出的一套可复用的解决方案。设计模式并不直接实现为代码,而是提供了一种在面向对象设计中如何处理常见问题的指南。...
23种设计模式(Design Pattern)的C++实现范例,包括下面列出的各种模式,代码包含较详细注释。另外附上“设计模式迷你手册.chm”供参考。 注:项目在 VS2008 下使用。 创建型: 抽象工厂模式(Abstract Factory) 生成...
在本文中,我们将深入探讨设计模式的核心概念,并结合"Head First DesignPattern_src"中的源码,详细解析一些关键的设计模式。 1. 单例模式(Singleton): 单例模式确保一个类只有一个实例,并提供全局访问点。在...
### Design Pattern 简明手册知识点详述 #### 一、接口型(interface)模式 **1. Adapter(适配器模式)** - **定义**:允许一个类接口与另一个不兼容的类接口协同工作。 - **分类**: - **继承型Adapter**:通过...
在“designpattern”这个压缩包中,可能包含了各种设计模式的C++实现。比如,单例模式通常用来保证一个类只有一个实例,并提供全局访问点;工厂方法模式则允许子类决定实例化哪一个类,提供了一种封装对象创建过程的...
3. 行为型设计模式:例如策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、命令模式(Command)、迭代器模式(Iterator)、访问者模式(Visitor)、备忘录模式(Memento)、状态...
本资源"designpattern.zip"包含了对Java中23种经典设计模式的详细讲解和代码实例,对于中高级Java工程师来说,是提升开发技能的必备学习材料。 设计模式通常分为创建型、结构型和行为型三大类。创建型设计模式关注...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,属于Java设计模式的重要组成部分。这个模式定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动...
4. **观察者模式(Observer Pattern)**: - 定义:定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 - 应用场景:适用于实时更新显示数据的应用程序,...
"DesignPattern.zip"这个压缩包包含了使用C++语言实现的设计模式源代码,适合在Visual Studio 2017环境下编译运行,并且能够方便地移植到Linux平台。下面将对设计模式及其在C++中的应用进行详细阐述。 1. **单例...
本文将通过Java类库中的实例,深入浅出地介绍设计模式,并特别地阐述了观察者模式(Observer Pattern)的使用和实现。 首先,设计模式的核心在于经验的分享和传承。它是对某一类问题的通用解决方案,可以有效地避免...
本资料"Swift DesignPattern"包含了一些Swift语言中的常见设计模式实例,下面我们将详细探讨这些设计模式及其在Swift中的应用。 1. **单例模式(Singleton)**:单例模式确保一个类只有一个实例,并提供全局访问点...
"Design Pattern中文版" 提供的是这些经典设计模式的中文解释,使得中国的开发者能够更方便地理解和应用这些模式。这份资料的描述指出字迹清晰,意味着阅读体验良好,适合深入学习。 PDF格式是一种广泛使用的文档...
《Professional ASP.NET Design Pattern》是一本深入探讨ASP.NET开发中设计模式的专业书籍,源代码的提供使得读者能够更直观地理解和应用这些设计模式。源代码的分章节组织(如c07到c14)表明内容可能按照书中的章节...