重构——46令函数携带参数(Parameterize Method)

令函数携带参数(Parameterize Method)

若干函数做了类似的工作,但在函数本体中却包含了不同的值;建立单一函数,以参数表达那些不同的值

一、动机

去除重复代码,提高灵活性

二、做法

1、新建一个带有参数的函数,使它可以替换先前所有的重复性函数

2、编译

3、将调用旧函数的代码改为调用新函数

4、编译,测试

5、对所有旧函数重复上述步骤,每次替换后,修改并测试

时间: 2024-07-30 12:17:37

重构——46令函数携带参数(Parameterize Method)的相关文章

重构——49以函数取代参数(Replace Parameter with Methods)

以函数取代参数(Replace Parameter with Methods) 对象调用某个参数,并将结果作为参数,传递给另一个函数,而接受该参数的函数本身也能够调用前一个函数:让参数接受者去除该项参数,并直接调用前一个参数 一.动机 如果函数可以通过其他途径获得参数值,那么它就不应该通过参数取得该值 二.做法 1.如果有必要,将参数的计算过程提炼到一个独立的函数中 2.将函数本体内引用该参数的地方改为调用新建的函数 3.每次替换后,编译并测试 4.全部替换完成后,使用Remove Parame

代码重构(一):函数重构规则

重构是项目做到一定程度后必然要做的事情.代码重构,可以改善既有的代码设计,增强既有工程的可扩充.可维护性.随着项目需求的不断迭代,需求的不断更新,我们在项目中所写的代码也在时时刻刻的在变化之中.在一次新的需求中,你添加了某些功能模块,但这些功能模块有可能在下一次需求中不在适用.或者你因为需求迭代与变更,使你原有的方法或者类变得臃肿,以及各个模块或者层次之间耦合度增加.此时,你要考虑重构了.   重构,在<重构,改善既有代码的设计>这本经典的书中给出了定义,大概就是:在不改变代码对外的表现的情况

重构——16引入外加函数(Introduce Foreign Method)

引入外加函数(Introduce Foreign Method) 你需要为提供服务的类增加一个函数,但你无法修改这个类:在客户端建立一个函数,并以第一参数形式传入一个服务类实例 一.动机 1.服务类不能提供一项新服务,你又不能修改源码 2.如果需要大量的外加函数,就Introduce Local Extension 3.外加函数是权宜之计 二.做法 1.在客户端类建立一个函数,用来提供你需要的功能,这个函数不应该调用客户端类的任何特性.如果他需要一个值,把该值当做参数传给它 2.以服务类实例作为

重构——47以明确函数取代参数(Replace Parameter with Explicit Methods)

以明确函数取代参数(Replace Parameter with Explicit Methods) 你有一个函数,其中完全取决于参数值而采取不同的行为:针对该参数的每一个可用值,建立一个独立函数 一.动机 1.根据不同参数值作出不同的行为,那么就应该使用本项重构 2.接口更加清楚 二.做法 1.针对参数的每一种可能性,新建一个明确函数 2.修改表达式的每个分支,使其调用合适的新函数 3.修改每个分支后,编译并测试 4.修改原函数的每一个被调用点,改而调用上述的某个合适的新函数 5.编译,测试

重构——42函数改名(Rename Method)

函数改名(Rename Method) 函数的名称未能揭示函数的用途:修改函数名称 一.动机 1.代码首先是为人写的,然后才是为计算机写的 2.想要成为一个真正的编程高手,起名的水平至关重要 二.做法 1.检查函数签名是否被超类或者子类实现,如果是,则需要针对每份实现分别进行下列步骤 2.声明一个新函数,将它命名为你要要的新名称.将旧函数的代码复制到新函数中,并进行调整 3.编译 4.修改旧函数,令它将调用转发给新函数 5.编译,测试 6.找出旧函数所有的引用点,修改它们,令它们改而引用新函数.

重构——51移除设值函数(Remove Setting Method)

移除设值函数(Remove Setting Method) 类中的某个字段应该在对象创建时被设值,然后就不再改变:去掉该字段的所有设值函数 一.动机 不希望对象被改变,就不要提供设值函数,同时final之 二.做法 1.检查设值函数被使用的情况,看它是否只被构造函数调用,或者被构造函数所调用的另一个函数调用 2.修改构造函数,使其直接访问设值函数所针对的那个变量 3.编译,测试 4.移除这个设值函数,将它所针对的字段设置为final 5.编译,测试

重构——66塑造模板函数(Form Template Method)

塑造模板函数(Form Template Method) 1.你有一些子类,其中相应的某些函数以相同顺序执行类似的操作,但各个操作的细节上有所不同 2.将这些不同的操作细节分别放进独立函数中,并保持它们都有相同的签名,于是原函数也就变得相同了.然后将原函数上移至超类 一.动机 Template Method 二.做法 1.在各个子类中分解目标函数,使分解后的各个函数要不完全相同,要不完全不同 2.运用Pull Up Mehtod将各个子类中完全相同的函数上移至超类 3.对于那些完全不同的函数,实

[总结]C语言二维数组作为函数的参数

前言:今天在实现装配线调度程序时候,用到了二维数组,并将其作为函数的参数.在写程序的时候,遇到一些问题,即二维数组做函数的参数应该如何正确表示.我写程序的错误如下程序所示: 1 #include <cstdio> 2 void print(int *a[3]) 3 { 4 printf("%d\n",a[0][0]); 5 } 6 7 int main() 8 { 9 int a[2][3] = {1,2,3,4,5,6}; 10 print(a); 11 return 0

编程-Xposed开发 如何修改通过参数传值的函数的参数?

问题描述 Xposed开发 如何修改通过参数传值的函数的参数? 如题,比如我要HOOK一个函数 其返回值是一个int类型,表示读取到byte[] b里面的内容的长度,而真正的内容在byte[] b里面,通过参数传递的.在函数执行前byte[] b是一个长度为1024的空数组. 执行后b读取到内容. 我想获取函数执行后b的内容并修改,但是失败了 按道理来说第一次的log应当能记录下函数执行后b的实际值,即函数所要传递的内容,但是得到的却是长度为1024的空数组. 第二次log确实得到了修改后的"r