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

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

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

  • 相关阅读:
    linux-磁盘挂载脚本
    VSCode插件
    数据模拟--Mock.js
    Vue学习笔记之组件
    Vue学习笔记之动画
    Echarts柱状图常用配置项
    Vue学习笔记之总体结构
    JSON数据格式开发规范
    苹果电脑和手机浏览器的区分
    二维码生成插件(jquery.qrcode.js)说明文档
  • 原文地址:https://www.cnblogs.com/alphablox/p/2909884.html
Copyright © 2011-2022 走看看