几种实现代码重用的方法

代码复用有以下几个好处:

  1. 1. 避免重复劳动,提高效率;
  2. 2. 减少需求变动影响的代码范围;
  3. 3. 保持系统的一致性;
  4. 4. 降低测试成本;
  5. 为了实现代码重用,有以下几个方法可以使用:抽取方法,抽取类。
  6. 抽取方法适用于class中的复用,比如:
  7. class A{
    1.     public void x0(){
    2.         ……
    3.     }
    4.     public void x1(){
    5.         ……
    6.     }
  8. }
  9. 假设x0和x1中都有排序的要求,我们可以抽取一个公共的方法sort,然后在x0和x1中调用它.将来如果需要调整sort方法,则只需要改动一个地方。

如果我们发现sort不只是A中需要,其他的类也需要,我们可以抽象一个class C,它包含sort方法,所有需要排序的class都可以实例化c并引用C。

在抽取方法时,可能会发现原始方法的需求并不完全一致的情况,根据不一致的程度不同,可以采用不同的方法,大致分成以下几种:参数值区别,参数类型的区别,部分逻辑的区别。

所谓参数值的不同,比如两个都是sort,只是排序的参数不同。这就涉及到参数抽取的问题,有时候参数会比较多,这也会影响方法到可读性,进而影响到可理解性。有的人喜欢用hashmap来处理,个人觉得不妥,因为读者看不出hashmap有哪些字段。如果一定要这么用,请用注释详细说明。使用值对象,也许是更好的办法。当然最好在值对象中加入factory 方法。

所谓参数类型的不同,比如一个是对整数排序,另一个是对long排序。这就需要使用泛型。一种方法是class的泛型,另一种是method的泛型。class的泛型定义如下:

public class Pair<T>{

  public T get(int idx);

}

如果class中只有少数几个方法是泛型的可以使用如下的方法:

public <T> T get(int idx);

如果希望对类型做限制可以使用extends的语法,extends可以指定多个接口。详细细节可以参看java核心编程。

如果两次调用,大部分都一样,但是小部分不同,我常用的办法加一个参数,然后根据参数选择不同的分支。这也许并不总是最好的办法,也许可以抽取出单独的类,并使用继承的方式隔离不同的那些代码。

总而言之,通过这些方法,通常可以极大的减少重复代码的出现。

原文地址:https://www.cnblogs.com/alphablox/p/2909884.html