admin 管理员组

文章数量: 1087139


2024年3月19日发(作者:浮点数在线计算)

维普资讯

第24卷第1期 

江 西 

科 学 

Vo1.24 No.1 

2006年2月 

JIANGXI 

SCIENCE 

Feb.2006 

文章编号:1001—3679(2006)0l一0062—04 

设计模式及其在JAVA类库中的典型应用 

张 娟,武友新 

(南昌大学计算机科学与技术系,江西南昌 330029) 

摘要:设计模式复用是软件项目中用来复用设计思想和面向对象代码的便捷方式,有效地继承和使用设计模 

式有助于提高软件开发的效率,提高软件可复用性、稳定性和可维护性。本文分析了设计模式在JAVA I/O 

库和AWT库中的典型应用,并阐明了设计模式的主要特点和使用设计模式给软件设计带来的好处。 

关键词:设计模式;软件复用;JAVA类库 

中国分类号:TP311 文献标识码:A 

Design Patterns and RepresentatiVe Application in JAVA Class Library 

ZHANG Juan.WU You-xing 

(Department of Computer Science&Technology,Nanehang University,Jiangxi Nanehang 330029 PRC) 

Abstract:The reusability of design patterns is the convenient way of reusability design thinking and 

object—oriented code.Inheriting and using the design patterns efifciently would good f0r the devel— 

opment of software and improve the reusability,stability and maintainability.This paper analyzes the 

application of design patterns in the Java I/O Lib and AWT Lib.and clarifies the characteristic of 

design patterns and the advantages of using the design patterns. 

Key words:Design patterns,Software reusability,Java development kit 

1 设计模式的概念 

描述它的用意的问题。 

环境(Context):模式的问题和问题的解答出 

设计模式(Design Pattern)是针对面向对象开 

现所需的前提条件。 

发过程中重复出现的设计问题所提出的通用的、 

解答(Solution):用于确定设计的结构、所涉 

高效的解决方案…。它描述问题、提出解决方 

及的角色以及角色之间的协作。 

案,并指出在什么条件下使用该方案及其效果。 

效果(Consequences):描述了模式应用的效 

从实际应用的观点来看,设计模式复用是软件项 果及使用模式应权衡的问题。 

目中用来复用设计思想和面向对象代码的便捷方 使用设计模式可以为软件设计带来很多好 

式。 

处:(1)设计模式中所描述的问题的解决方案,其 

般来说,设计模式应当包括以下要素: 

有效性已经在很多设计中得到证实;(2)每个模 

名字(Name):一个模式必须有一个有意义的 

式都是软件设计中的可重用元素,基于模式的设 

简短的而且准确的名字。 

计具有更大的灵活性、可扩展性和更好的可重用 

问题(Problem):每一个模式必须有一个能够 

性;(3)设计模式的基本思想是将程序中可能变 

收稿日期:2005—07—13;修订日期:2006—0l一08 

作者简介:张娟(1980一),女,江西南昌人,南昌大学在读硕士研究生。 

维普资讯

第1期 张 娟等:设计模式及其在jAVA类库中的典型应用 ・63・ 

化的部分与不变的部分分离,这样做的结果不仅 

使得代码更容易扩展和维护,而且也使程序更容 

易读懂。 

所有结构良好的面向对象软件体系结构中都 

包含了许多模式,发掘已有软件中的设计模式将 

有助于在设计中使用模式和发现模式。JAVA是 

Sun公司推出的新一代面向对象程序设计语言, 

在JAVA API类库的设计中使用了多种设计模 

式,认识这些模式不仅有助于在软件设计中使用 

模式、提高设计质量和设计水平,也有助于总结经 

验和发掘新的设计模式。下面就设计模式在JA・ 

VA类库中的典型应用进行分析。 

2 JAVA I/O库的两个设计模式 

JAVA语言采用流的机制来处理输入、输出。 

JAVA I/0库提供了两套平行独立的等级结构,即 

InputStream,OutputStream和Reader,Writer;前者 

处理byte流,后者处理char流。在InputStream等 

代表的等级结构的内部,一些流处理器…可以对 

另一些流处理器起到装饰作用,形成新的具有改 

善了功能的流处理器,其设计是符合装饰模式的。 

适配器模式为jAVA I/0库中另一个重要的设计 

模式,广泛应用于原始流处理器…的设计,byte流 

数据到char流数据的适配。 

2.1装饰(Decorator)模式的应用 

装饰模式是继承关系的一种替代方案。它可 

以在不创造更多子类的情况下,将对象的功能动 

态地加以扩展 。装饰模式主要适用于以下几 

种情况:需要扩展一个类的功能,或给一个类增加 

附加的责任;需要动态地给一个对象增加功能,这 

些功能可以动态地撤销;需要增加由一些基本功 

能的排列组合而产生的非常大量的功能,从而使 

继承关系变得不现实。 

’由于.JAVA I/O库需要很多性能的各种组 

盒,如果使用继承方法来实现必然造成大量性能 

重复.的类的出现;装饰模式的应用很好的解决了 

这个问题,使I/O库由一些基本的原始流处理器 

和围绕它们的装饰流处理器所组成。下面以In. 

putStream类型来说明装饰模式的应用.原始流处 

理器(如ByteArraylnputstream,FilelnputStream等) 

接收一个Byte数组对象,FileDescriptor对象或者 

其它的源流对象,并生成一个inputStream类型的 

流对象;链接流处理器可以接收另一个流对象作 

为流源,并对之进行功能扩展,如Buffered ̄nput. 

Stream提供缓冲功能,DatalnputStream提供基于 

多字节的读取功方法,可以读取原始数据类型的 

数据。InputStream类型的类图如图1所示: 

I 巫盟 堡塑 lI里 ! 堡!!! 1. 

图1 InputStream类型的类图 

由于使用了装饰模式,客户端程序可以很方 

便地根据需要组合具有不同功能的输入或者输出 

流,例如: 

InputStream in =new DatalnputStream(new 

Filelnputstream(fileName)): 

同时,当需要增加一个新的装饰功能时,只需 

增加相应的链接流处理器,就可以和已有的代码 

起工作了,而无需更改程序,这样就使得扩展更 

加容易。 

2.2适配器(Adapter)模式的应用 

适配器模式把一个类的接口变换成客户端所 

期待的另一种接口,从而使原本接口不匹配而无 

法在一起工作的两个类能够在一起工作 J。适 

配器模式主要适用以下几种情况:系统需要使用 

现有的类,而此类的接口又不符合系统的需要;需 

要改变多个已有的子类的接口。 

在JAVA I/O库中,几乎所有处理Byte流的 

类都有与之对应的处理Char流的类。但是,有很 

多时候需要把这两种类结合起来使用。JAVA语 

言提供的适配器类很好的解决了这个问题,例如, 

InputStreamReader类把InputSteam类适配到Re— 

ader类,它们之间的结构如图2所示;而Output— 

StreamWriter类把OutputStream适配到Writer类。 

换言之,它们把byte流适配成char流。 

图2 InputStreamReader与Reader等类的结构图 

由于使用了适配器模式,客户端程序可以很 

方便的把byte流适配成char流。例如要从英文 

的DOS窗口读入中文输入,就要把System.in适 

配到Reader: 

Reader rC=new lnputStreamReader 

(System.in): 

另外适配器模式还应用于所有原始流处理 

维普资讯

64・ 江西科 学 2006年第24卷 

的设计,如ByteArraylnputstream继承了Input 

合成模式是将对象组合成树形结构以表示 

“部分一整体”的层次结构,从而使得客户在使用 

单个对象和组合对象时具有一致性。合成模式主 

要适用以下几种情况:需要描述对象的部分和整 

Stream的接口,而封装了一个byte数组,也就是 

说它将一个byte数组的接口适配成InputStream 

流处理器的接口。 

3。JAVA AWT库的两个设计模式 

JAVA AWT库用来支持图形用户界面编程, 

体的等级结构:需要客户端忽略掉个体构件与组 

合构件的区别¨。。。 

AWT的图形界面构件是建立在AWT库中的 

Container类和Component类上的,从AWT的类图 

它主要包括图形界面组件部分和事件处理模型两 

个部分,下面分别从这两方面介绍JAVA AWT库 

中应用的设计模式。 

3.1观察者(Observer)模式的应用 

观察者模式定义了一种一对多的依赖关系, 

让多个观察者对象同时监听某个主题对象,当这 

个主题对象的状态发生变化时,会通知所有观察 

者对象,使它们能够自动更新自己 一 。观察者 

模式主要适用以下几种情况:要求在系统中某个 

对象的状态发生改变时,某些其它的对象做山相 

应的改变;要求这些对象间的耦合性降到最低时 

能够维持行动的协调一致。 

JAVA事件处理机制是建立在观察者模式基 

础之上的,以事件的委派为特征的委派事件模型 

(DEM) 】。在DEM模型中对象通常被划分为3 

种:事件源对象、事件对象和事件监听器对象。 

JAVA语言中所有的AWT构件都是java.util. 

Component的于类,都是事件源对象,都保持一个 

事件监听器的列表,并提供增加或删除监听器的 

方法;而所有的AWT中的事件对象都是从AW- 

TEvent继承而来的,封装了事件的源对象与事件 

监听器对象所需要的信息;AWT库中的所有的事 

件监听器接口都是Event Listener接口的子类,一 

个对象要成为事件监听器对象,必须实现事件监 

听器接口。DEM模型的JAVA实现如图3所示。 

一。J ’  

图3 DEM模型的JAVA实现 

观察者模式将被观察的对象和观察者分别封 

装起来,使得它们可以各自独立地改变和复用,并 

可任意增加和删除观察者 。一个被观察的对 

象只知道它有一系列观察者,每个都符合抽象的 

观察者的接口,但并不知道每个观察者属于哪一 

个具体的类,因此它们之间的耦合是最小的。 

3.2合成(Composite)模式的应用 

(如图4)可以看出其设计是符合合成模式的。 

Component是在JAVA AWT包中声明的一个抽象 

类,在Component类中声明了所有图形对象共有 

的接口。Button、Label和Container等是Compo. 

nent类的子类,其中Button、Label等类代表基本 

图形对象,而Container则代表组合图形对象。由 

基本图形对象和组合图形对象组合而成。在 

Container类中有多个指向Component对象的引 

用,它们既可以代表基本图形对象,又可以代表组 

合图形对象,因此,基本图形对象可以被组合成更 

复杂的组合图形对象,而这个组合对象又可以再 

被组合,这样不断的递归下去,就可以得到任何想 

要的图形对象。 

图4 AWT合成模式类图 

在合成模式中,由于Component类代表了所 

有图形对象的共性,客户代码中可以通过Compo— 

nent一致地表示基本对象和组合对象,而无需对 

它们加以区分,这样就大大简化了客户代码。同 

时,当需要增加新类型图形组件时,只要它直接或 

间接继承Component类,就可以与已有代码一起 

工作,而无需更改程序,这样就使得扩展更加容 

易。 

4 结束语 

设计模式还广泛地应用于JAVA其它类库的 

设计中,如JAVE AWT的Peer架构中应用的抽象 

工厂模式,JDBC API中的桥梁模式。JAVA Collee- 

tion中的迭代子模式等¨¨。通过分析设计模式 

在JAVA I/O库和AWT库设计中的典型应用及 

其带来的好处,可以看到研究和应用好的设计模 

式会使我们更加深入地理解面向对象软件设计的 

思想,改善软件开发过程,改良软件结构,提高软 

维普资讯

第1期 张 娟等:设计模式及其在JAVA类库中的典型应用 ‘65・ 

件的可扩展性和可复用性,从而极大地提高软件 

aGUI中的分析与应用[J].计算机系统应用,2005, 

开发效率。 

(5):32—34. 

[6] 宋森,袁兆山,陈 刚,等.Java事件处理机制中 

参考文献: 

设计模式的分析[J].合肥工业大学学报(自然科学 

版),2004,(11):l383一l386. 

[1] 阎宏.Java与模式[M].北京:机械工业出版社, 

[7] 刘征驰,杨贯中.Visitor设计模式研究[J].计算机 

2002. 

工程,2005,(8):84—86. 

[2] Erich Gamma,Richard Helm,Ralph Johnson,John 

[8] 顾颖,徐良贤,贾银军.Junit设计模式分析和应用 

Vlissides.Design patterns—elements of reusable object 

[J].计算机工程,2004,30(z1):178—179. 

oriented software[M].Published by Addison Wesley 

[9] 王江涛.观察者设计模式在嵌入系统中的应用[J]. 

Professional,1994. 

[3]伍星,王茜.设计模式在HTML解析器中的应 

计算机工程,2004,3O(z1):66—68,135. 

[1O]黄靖,赵海光.软件复用、软件合成与软件集成 

用[J].计算机工程,2005,31(2):89—9O. 

[4]杨年华,张礼平.JAVA类库中的策略模式[J].计算 

[J].计算机应用研究,2004,(9):118—120. 

机应用与软件,2004,21(1):20—21. 

[1 1]Bruce Eeke1.Thinking in Java[M].Prentice Hall, 

l998. 

[5]雷镇,雷蕾,周淑秋,等.Observer模式在Jay- 

(上接第13页) 

r 8

= 

,1 一=一 

: 

(:1n =,量芯J,基态) 

这一新的理论和计算方法获得了成功。 

本文的概念和计算显然涉及量子理论中的一 

a。是氢原子的半径。将(14)式代入(13)式, 

些中大原则问题:经典物理与量子物理和微观世 

并令al=a,可得: 

界的关系、原子分立能级的物理本质,等等。都属 

E电再= (15) 

于“量子力学的解释”这一世界物理学界争论了 

大半个世纪的问题。 

由于氢原子的电离能e /2a=13.61,所以 

根据本文的新概念(原子第二宇宙速度),同 

E电再=13.61 z (eV) (16) 

样推导出了核外电子的能量公式(11)。那么它 

(15)、(16)式即为单电子原子和离子电离能 

和玻尔的原子分立能级公式有何关系?下一步, 

的普遍公式。 

作者企图解释原子分立能级和更普遍的“量子 

3 实验验证和理论预言 

化”概念的物理本质。已提出了新的理论模型。 

这些将在下一篇文章中论述。更进一步,作者将 

现根据(15)、(16)式,将周期表中百余种元 

在这两篇文章的基础上对量子力学作出一个系统 

素的离子的电离能计算数值和文献[6]中的实验 

的新解释,这将在第三篇文章中论述。 

数值同时列入上表(见上页,均是电离到只剩一 

个电子时,该离子的电离能) 

从附表可知: 

参考文献: 

[1]史包尔斯基.原子物理学[M].北京:高等教育出版 

(1)元素周期表中,前28种元素的类氢离子 

社。1959. 

的电离能的理论计算值与实验值符合得很好; 

[2] Ford W.Classical and Modern Physics[M].eopytight, 

(2)由于现今实验技术的局限性,周期表中 

1972. 

第29号以后的元素的类氢离子的电离能,科学界 

[3]Bohr N,Proc Dan[J].Acad.SC,1918,4(1). 

至今尚未用实验测出,所以也将理论计算值作为 

[4] 周世勋.量子力学[M].上海:上海科学技术出版 

理论预言列出。由于实验已测出的数值与理论值 

社,1962. 

符合很好,有理由相信:将来实验定会证实这些理 

[5]J.C.willmott.Atomu Physics[M].John wiley and sons 

论预言。 

hd,1975. 

这样,就用“原子第二宇宙速度”概念定量地 

[6] c.W艾仑(英).物理量和天体物理量[M].上海: 

上海人民出版社,1976. 

解释了所有单电子原子和离子的电离能,从而使 


本文标签: 对象 模式 设计 应用 设计模式