提高Java代码可重用性的三个措施
本文介绍了修改现有代码以提高其可重用性的三种方法。分别是:重写类的实例方法,将参数类型改为接口,选择最简单的参数接口类型。
措施一:重写类的实例方法
通过类的继承来实现代码复用,并不是一种准确的代码复用技术,因此不是最理想的代码复用机制。换句话说,如果我们不继承整个类的所有方法和数据成员,我们就不能在类中重用单个方法。继承总是会带来一些冗余的方法和数据成员,这总是会使重用类中某个方法的代码变得复杂。此外,派生类对父类的依赖使代码更加复杂:对父类的更改可能会影响子类;当修改父类或子类中的任何一个类时,我们很难记住哪个方法被子类覆盖,哪个方法没有被子类覆盖;最后,有时子类中的覆盖方法是否调用父类中的相应方法并不明显。
任何方法,只要它执行单个概念的任务,它本身应该是首选的可重用代码。为了重用这些代码,我们必须回到面向过程的编程模式,将类的实例方法移到一个全局过程中。为了提高这个流程的可重用性,流程代码应该像静态工具方法一样编写:只能使用自己的输入参数,只能调用其他全局流程,不能使用任何非局部变量。对外部依赖性的这种限制简化了过程的应用,使得过程可以方便地在任何地方使用。当然,由于这种组织方式总是让代码有更清晰的结构,即使是不考虑复用性的代码也能从中受益。
在Java中,方法不能独立于类而存在。因此,我们可以将相关的进程组织成独立的类,并将这些进程定义为公共静态方法。
例如,对于下面的类:
类多边形{
。
。
public int getPerimeter() {...}
public boolean is convex(){...}
public boolean包含点(点p) {...}
。
。
}
我们可以把它改写成:
类多边形{
。
。
public int get perimeter(){ return ppolygon . computeperimeter(this);}
public boolean is convex(){ return ppolygon . is convex(this);}
public boolean contains Point(Point p){ return ppolygon . contains Point(this,p);}
。
}
其中,聚苯醚为:
class pPolygon {
static public int computePerimeter(Polygon Polygon){...}
静态公共布尔isConvex(Polygon polygon) {...}
0条评论