如何提高java代码的重用性

 更新时间:2019年07月19日 08:44:56   作者:angryTom  
在本篇文章中小编给各位分享了关于如何提高java代码的重用性的相关知识点内容,有需要的朋友们参考下。

提高java代码可重用性有哪些方法措施,以下就讲解了三种关于提高java代码可重用性的措施,一起来了解一下吧~

一、改写类的实例方法

通过类继承实现代码重用不是精确的代码重用技术,因此它并不是最理想的代码重用机制。继承总是带来一些多余的方法和数据成员,它们总是使得重用类里面某个方法的代码复杂化。

另外,派生类对父类的依赖关系也使得代码进一步复杂化:对父类的改动可能影响子类;修改父类或者子类中的任意一个类时,我们很难记得哪一个方法被子类覆盖、哪一个方法没有被子类覆盖;最后,子类中的覆盖方法是否要调用父类中的对应方法有时并不显而易见。

任何方法,只要它执行的是某个单一概念的任务,就其本身而言,它就应该是首选的可重用代码。为了重用这种代码,我们必须回归到面向过程的编程模式,把类的实例方法移出成为全局性的过程。

为了提高这种过程的可重用性,过程代码应该象静态工具方法一样编写:它只能使用自己的输入参数,只能调用其他全局性的过程,不能使用任何非局部的变量。这种对外部依赖关系的限制简化了过程的应用,使得过程能够方便地用于任何地方。

当然,由于这种组织方式总是使得代码具有更清晰的结构,即使是不考虑重用性的代码也同样能够从中获益。

在Java中,方法不能脱离类而单独存在。为此,我们可以把相关的过程组织成为独立的类,并把这些过程定义为公用静态方法,在组织和封装对象数据成员的过程中,类起到了不可或缺的作用,类通过多重接口实现多态性的能力本身也带来了卓越的代码重用支持。

class Polygon {
public int getPerimeter() {...}
public boolean isConvex() {...}
public boolean containsPoint(Point p) {...}
}
我们可以把它改写成:

class Polygon {
public int getPerimeter() {return pPolygon.computePerimeter(this);}
public boolean isConvex() {return pPolygon.isConvex(this);}
public boolean containsPoint(Point p)
{return pPolygon.containsPoint(this, p);}
}
其中,pPolygon是:

class pPolygon {
static public int computePerimeter(Polygon polygon) {...}
static public boolean isConvex(Polygon polygon) {...}
static public boolean
containsPoint(Polygon polygon, Point p) {...}
}

二、选择最简单的参数接口类型

描述参数对象要求的接口越简单,其他类实现该接口的机会就越大,由此,其对象能够作为参数使用的类也越多。从下面这个例子可以很容易地看出这一点:

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

这个方法用于检查两个窗口是否重叠。如果这个方法只要求从参数获得两个窗口的矩形坐标,此时相应地简化这两个参数是一种更好的选择,有些时候可能会出现描述参数需求的接口拥有太多方法的情况。

此时,我们应该在全局名称空间中定义一个新的公共接口供其他面临同一问题的代码重用。当我们需要象使用C语言中的函数指针一样使用参数时,创建唯一的接口描述参数需求是最好的选择。例如,假设有下面这个过程:

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

该方法运用参数中提供的比较对象comp,通过比较给定列表list中的对象排序list列表。sort对comp对象的唯一要求是要调用一个方法进行比较,因此SortComparison接口不能在其他地方重用。

三、把参数类型改成接口

在面向对象编程中,代码重用真正的要点在于通过接口参数类型利用多态性,而不是通过类继承,我们通过对接口而不是对类编程达到代码重用的目的。如果某个方法的所有参数都是对一些已知接口的引用,那么这个方法就能够操作这样一些对象,当我们编写方法的代码时,这些对象的类甚至还不存在。从技术上说,可重用的是方法,而不是传递给方法的对象。

例如,让我们假设有这样一个方法:

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

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

您可能感兴趣的文章:

相关文章

  • 七个Spring核心模块详解

    七个Spring核心模块详解

    这篇文章主要为大家详细介绍了七个Spring的核心模块,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • 认证授权中解决AuthenticationManager无法注入问题

    认证授权中解决AuthenticationManager无法注入问题

    这篇文章主要介绍了认证授权中解决AuthenticationManager无法注入问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-10-10
  • spring data jpa使用详解(推荐)

    spring data jpa使用详解(推荐)

    这篇文章主要介绍了spring data jpa使用详解(推荐),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • Spring Security如何使用URL地址进行权限控制

    Spring Security如何使用URL地址进行权限控制

    这篇文章主要介绍了Spring Security如何使用URL地址进行权限控制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • RestTemplate的URL请求示例

    RestTemplate的URL请求示例

    这篇文章主要为大家介绍了RestTemplate的URL请求示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Java对称与非对称加密算法原理详细讲解

    Java对称与非对称加密算法原理详细讲解

    对称加密算法指加密和解密使用相同密钥的加密算法。对称加密算法用来对敏感数据等信息进行加密,非对称加密算法指加密和解密使用不同密钥的加密算法,也称为公私钥加密
    2022-11-11
  • Java经典面试题汇总:Spring

    Java经典面试题汇总:Spring

    本篇总结的是Spring框架相关的面试题,后续会持续更新,希望我的分享可以帮助到正在备战面试的实习生或者已经工作的同行,如果发现错误还望大家多多包涵,不吝赐教,谢谢
    2021-07-07
  • Spring Boot之搞定mongoTemplate的知识小结

    Spring Boot之搞定mongoTemplate的知识小结

    这篇文章主要介绍了Spring Boot之搞定mongoTemplate的知识小结,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • JAVA获取特定格式时间方式

    JAVA获取特定格式时间方式

    我们有时要获取时间,年月日时分秒周几,有时要以特定的格式出现,本文主要介绍了JAVA获取特定格式时间方式,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • activiti获取流程图实例

    activiti获取流程图实例

    这篇文章主要介绍了activiti获取流程图的方法,需要的朋友可以参考下
    2014-08-08

最新评论