zoukankan      html  css  js  c++  java
  • 几种实现代码重用的方法

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

    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核心编程。

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

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

  • 相关阅读:
    AJAX异步传输——以php文件传输为例
    js控制json生成菜单——自制菜单(一)
    vs2010中关于HTML控件与服务器控件分别和js函数混合使用的问题
    SQL数据库连接到服务器出错——无法连接到XXX
    PHP错误:Namespace declaration statement has to be the very first statement in the script
    【LeetCode】19. Remove Nth Node From End of List
    【LeetCode】14. Longest Common Prefix
    【LeetCode】38. Count and Say
    【LeetCode】242. Valid Anagram
    【LeetCode】387. First Unique Character in a String
  • 原文地址:https://www.cnblogs.com/alphablox/p/2909884.html
Copyright © 2011-2022 走看看