几种实现代码重用的方法

摘要:
代码重用有以下优点:1.避免重复工作,提高效率;2.减少受需求变化影响的代码范围;3.保持系统的一致性;4.降低测试成本;为了实现代码重用,可以使用以下方法:提取方法、提取类。在提取方法时,可能会发现原始方法的要求并不完全一致。根据不一致的程度,可以使用不同的方法,大致可以分为以下几类:参数值差异、参数类型差异和部分逻辑差异。使用值对象可能是更好的方法。

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

  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环境下搭建go开发环境使用Xcode Instruments Leak解决内存泄漏问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

jmeter监控内存,CPU等方法

当然,我们也可以选择本地进程下的远程进程来获取服务器的内存使用情况和其他信息。在文本框中输入需要测试的服务器的IP地址:port,然后在下面输入用户名和密码。单击“连接”以查看发生的情况。...

sqlserver 计算 百分比

selectltrim+'%'As百分比NUMERIC(P,S)P的默认值是:38S的默认值是:-84~127numeric(a,b)函数有两个参数,前面一个为总的位数,后面一个参数是小数点后的位数,例如numeric(5,2)是总位数为5,小数点后为2位的数,也就是说这个字段的整数位最大是3位。...

input框输入金额处理的解决办法

最近,已经启动的项目在删除输入输入量时突然出现问题。各种在线搜索都没有找到你想要的。今天,我将以react框架为例进行代码贡献。我会写下需求和解决方案,希望对我的朋友有用。如果有更好的方法实现它,请给我一些建议!”在“:”下;n=数学。防抱死制动系统;vars=“”;对于{s+=.replace;}S=S||“整数”;n=数学。地板对于{varp=“”;对于...

docker安装MySQL5.7示例!!坑,ERROR 1045 (28000): Access denied for user

处理mysql1045错误1.在/usr/local/mysql/conf中添加一个文件。d目录:mysql文件的内容是:[mysqld]skip-grant-tables2重新启动mysql:dockerstartmysql5.73进入docker:dockerexec-itmysql5.7bash4登录mysql:mysql-uroot-p5将root密...

汇编指令MOV

格式:MOVDST,SRC例如:MOVEAX,#050aH;将十六进制050a传送到通用寄存器eax中MOVDI,BXMOVES,AXMOVAX,DSMOVAL,23HMOV[2000H],02HMOV[2061H],BX...

C# 没落了吗?

首先,这个数字--------------------------------------------C#是否正在衰落与微软的整个平台密切相关。近年来,使用C#的人越来越少,这也是因为越来越少的人专门为Microsoft平台开发产品。现在是移动时代,微软基本上错过了互联网和移动互联网这两波浪潮。现在生活不容易。在软件工程中,人们常说“唯一不变的就是改变本身”...