从Java类库看设计模式(4)

在上一部分中,介绍了两个结构型的模式:Bridge和Decorator。这一部分的内容,将会 接着上面的讲解,继续我们的设计模式之旅。

这一部分,除了还会介绍一个结构型的Composite模式之外,还会有两个行为模式登场。 实际上在前面的内容中,我们已经接触到行为模式了:Observer和Command就是两个典型的行 为模式。行为模式更多的注重于算法和对象建间职责的分配,也就是说,它会更多的关注于 这个模式系统之类的各对象协作间的语义,以及在对象间进行通讯的流控制。

Composite模式

毫无疑问的,AWT中的Component-Container体系就是一个很好的Composite模式的例子。 Container继承于Component,而Container中有可以包含有多个Component,因为Container实 际上也是Component,因而Container也可以包含Container。这样通过Component-Container 结构的对象组合,形成一个树状的层次结构。这也就是Composite模式所要做的。

Composite模式是为了简化编程而提出的,一般的在编程的时候,如果严格的区分 Component和Container的话,有时候会带来许多不便,而且这些往往是没有必要的。比如, 我要在一个Container中放置一个Component,我并不需要知道这个Component到底是一个 Container,或者就是一个一般的Component,在父级容器中所要做的,只是记录一个 Component的引用,在需要的时候调用Component的绘制方法来显示这个Component。当这个 Component确实是一个Container的时候,它可以通过Container重载后的绘制方法,完成对这 个容器的显示,并把绘制消息传递给到它的子对象去。也就是说,对一个父级容器而言,它 并不不关心,其子对象到底是一个Component,还是一个Container。它需要将Component和 Container统一对待。

图十一:Composite模式的类图

Composite模式比较简单,实现起来也不复杂,但是有一定的局限性。比如,在处理树的 时候,我们往往需要处理三类对象:子树,页节点和非页节点。而在Composite模式中对于子 树和非叶节点的区分并不明显,而是把他们合成为一个Composite对象了。而且在GOF给出的 Composite的模式中,对于添加,删除子节点等属于Composite对象的的方法,是放在了 Component对象中的,这虽然在实现的时候可以区分开来,但容易造成一些概念上的误解。

由上所叙,我们可以提出一个改进了的Composite模式,引入子树对象,从而将子树和非 叶节点分开,如下图所示:

图十二:Composite模式的一种变体

时间: 2016-04-23

从Java类库看设计模式(4)的相关文章

从Java类库看设计模式(2)

在上一部分的内容中,我们讲到什么是模式,什么是设计模式,以及对一个设计模式 Observer的详细阐叙.相信大家对于模式的概念应该是比较的理解了.这部分及以后的内容 ,将会步入正题,从Java类库的分析入手,来阐叙设计模式是如何应用到一个完美的设计中 的.实际上,Java类库非常的庞杂,这儿不可能把所有能够找到的设计模式的例子一一列举 ,只是找了一些容易发现的例子.实际上也没有必要,因为只要对一个设计模式有足够的理 解,对于它的具体应用而言,倒是一件不是很困难的事情. Command模式 在设计

从Java类库看设计模式(1)

在这一部分的内容中,介绍的是一个相对简单但功能强大的模式:Observer模式.希望通 过这部分地叙述,大家看了之后,能够对设计模式有一个比较全面地,感性的认识. 很多时候,对于一个设计来说(软件上的,建筑上的,或者它他工业上的),经验是至关 重要的.好的经验给我们以指导,并节约我们的时间:坏的经验则给我们以借鉴,可以减少 失败的风险.然而,从知识层面上来讲,经验只是作为一种工作的积累而存在于个人的大脑 中的,很难被传授或者记录.为了解决这样的问题,人们提出了所谓的模式的概念.所谓模 式,是指在

从Java类库看设计模式(5)

有了前面诸多设计模式的基础,这儿可以提出一个比较特殊的模式MVC.MVC并不属于GOF 的23个设计模式之列,但是它在GOF的书中作为一个重要的例子被提出来,并给予了很高的评 价.一般的来讲,我们认为GOF的23个模式是一些中级的模式,在它下面还可以抽象出一些更 为一般的低层的模式,在其上也可以通过组合来得到一些高级的模式.MVC就可以看作是一些 模式进行组合之后的结果(实际上,MVC的出现要早于设计模式的提出,这而只是对它在设计 模式的基础上进行在分析).如果没有前面的基础,理解MVC或许会有

从Java类库看设计模式(3)

上一次主要介绍了几个创建型的设计模式AbstractFactroy,FactoryMethod和Singliton .它们的共同的特点,都是用来创建对象的.这次接下来的内容,涉及到的是几个结构型的 模式.所谓结构型模式,就是用来解决在创建系统结构的过程中,通过对类或者对象进行合 理有效的组合,以获得更大的结构的方法.这儿主要讲到了Bridge模式和Decorator模式.对 于Bridge模式可能需要更多的理解,因为它在很大程度上说,例示了设计模式的基本的设计 思路和原则. Bridge模式 当

《Java 7程序设计入门经典》一1.17 Java类库

1.17 Java类库 本章展示的示例程序充分利用了Java的两个内置函数:println()和print().这些方法是System类的成员.System类是一个由Java预定义的类,它会自动添加到程序中.从更大的范围看,Java环境依赖于一些内置的类库(class library),它包含许多内置的方法,来提供对输入/输出.字符串处理.网络.图形用户界面等功能的支持.所以从总体来看,Java是其语言本身与其标准类的结合.之后将会看到,类库提供Java的许多功能.实际上,Java程序员需要学习

PHP如何调用JAVA 类库

JAVA是个非常强大的编程利器,它的扩展库也是非常的有用,这篇教程,主要讲述怎样使用PHP调用功能强大的JAVA 类库(classes).为了方便你的学习,这篇教程将包括JAVA的安装及一些基本的例子. Windows下的安装 第一步:安装JDK,这是非常容易的,你只需一路回车的安装好.然后做好以下步骤. 在 Win9x 下加入 :"PATH=%PATH%;C:\jdk1.2.2\bin" 到AUTOEXEC.BAT文件中 在 NT 下加入 ";C:\jdk1.2.2\bin

怎样使用PHP调用功能强大的JAVA 类库

JAVA是个非常强大的编程利器,它的扩展库也是非常的有用,这篇教程,主要讲述怎样使用PHP调用功能强大的JAVA 类库(classes).为了方便你的学习,这篇教程将包括JAVA的安装及一些基本的例子. windows下的安装 第一步:安装JDK,这是非常容易的,你只需一路回车的安装好.然后做好以下步骤. 在 Win9x 下加入 :"PATH=%PATH%;C:\jdk1.2.2\bin" 到AUTOEXEC.BAT文件中 在 NT 下加入 ";C:\jdk1.2.2\bin

怎样使用PHP调用功能强大的JAVA类库

JAVA是个非常强大的编程利器,它的扩展库也是非常的有用,这篇教程,主要讲述怎样使用PHP调用功能强大的JAVA 类库(classes).为了方便你的学习,这篇教程将包括JAVA的安装及一些基本的例子. windows下的安装 第一步:安装JDK,这是非常容易的,你只需一路回车的安装好.然后做好以下步骤. 在 Win9x 下加入 :"PATH=%PATH%;C:\jdk1.2.2\bin" 到AUTOEXEC.BAT文件中 在 NT 下加入 ";C:\jdk1.2.2\bin

java-ImageJ里的Bonej中的thickness算法,有人能解释原理吗?JAVA我看不懂

问题描述 ImageJ里的Bonej中的thickness算法,有人能解释原理吗?JAVA我看不懂 ImageJ里的Bonej中的thickness算法,有人能解释原理吗? 解决方案 二值图像细化,你可以尝试Zhang-Suen thinning算法,代码在本人博客上有说明