快速业务通道

提高Java代码重用性的三个措施 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
是对一些已知接口的引用,那么这个方法就能够操作这样一些对象 :当我们编写方法的代码时,这些对象的类甚至还不存在。从技术上说,可重用 的是方法,而不是传递给方法的对象。”

在“措施一”得到的结果上应用Holub的看法,当某块代码能够编写为独立的 全局过程时,只要把它所有类形式的参数改为接口形式,我们就可以进一步提高 它的可重用能力。经过这个改动之后,过程的参数可以是实现了该接口的所有类 的对象,而不仅仅是原来的类所创建的对象。由此,过程将能够对可能存在的大 量的对象类型进行操作。

例如,假设有这样一个全局静态方法:

static public boolean contains(Rectangle rect, int x, int y) {...}

这个方法用于检查指定的点是否包含在矩形里面。在这个例子中,rect参数 的类型可以从Rectangle类改变为接口类型,如下所示:

static public boolean contains(Rectangular rect, int x, int y) {...}

而Rectangular接口的定义是:

public interface Rectangular {Rectangle getBounds();}

现在,所有可以描述为矩形的类(即,实现了Rectangular接口的类)所创建的 对象都可以作为提供给pRectangular.contains()的rect参数。通过放宽参数类 型的限制,我们使方法具有更好的可重用性。

不过,对于上面这个例子,Rectangular接口的getBounds方法返回 Rectangle,你可能会怀疑这么做是否真正值得。换言之,如果我们知道传入过 程的对象会在被调用时返回一个Rectangle,为什么不直接传入 Rectangle取代 接口类型呢?之所以不这么做,最重要的原因与集合有关。让我们假设有这样一 个方法:

static public boolean areAnyOverlapping(Collection rects) {...}

该方法用于检查给定集合中的任意矩形对象是否重叠。在这个方法的内部, 当我们用循环依次访问集合中的各个对象时,如果我们不能把对象cast成为 Rectangular之类的接口类型,又如何能够访问对象的矩形区域呢?唯一的选择是 把对象 cast成为它特有的类形式(我们知道它有一个方法可以返回矩形),它意 味着方法必须事先知道它所操作的对象类型,从而使得方法的重用只限于那几种 对象类型。而这正是前面这个措施力图先行避免的问题!

提高Java代码重用性的三个措施(3)

时间:2011-06-19

措施三:选择最简单的参数接口类型

在实施第二个措施时,应该选用哪一种接口类型来取代给定的类形式?答案是 哪一个接口完全满足过程对参数的需求,同时又具有最少的多余代码和数据。描 述参数对象要求的接口越简单,其他类实现该接口的机会就越大——由此,其对 象能够作为参数使用的类也越多。从下面这个例子可以很容易地看出这一点:

static public boolean areOverlapping(Window window1, Window window2) {...}

这个方法用于检查两个窗口(假定是矩形窗口)是否重叠。如果这个方法只要 求从参数获得两个窗口的矩形坐标,此时相应地简化这两个参数是一种更好的选 择:

static public boolean areOverlapping(Rectangular rect1, Rectangular rect2) {...}

上面的代码假定Window类型实现了Rectangular接口。经过改动之后,对于任 何矩形对象我们都可以重用该方法的功能。

有些时候可能会出现描述参数需求的接口拥有太多方法的情况。此时,我们 应该在全局名称空间中定义一个新的公共接口供其他面临同一问题的代码重用。

当我们需要象使用C语言中的函数指针一样使用参数时,创建唯一的接口描述 参数需求是最好的选择。例如,假设有下面这个过程:

static public void sort(List list, SortComparison comp) {...}

该方法运用参数中提供的比较对象comp,通过比较给定列表list中的对象排 序list列表。sort对comp对象的唯一要求是要调用一个方

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号