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

以明确函数取代参数(Replace Parameter with Explicit Methods)

你有一个函数,其中完全取决于参数值而采取不同的行为;针对该参数的每一个可用值,建立一个独立函数

一、动机

1、根据不同参数值作出不同的行为,那么就应该使用本项重构

2、接口更加清楚

二、做法

1、针对参数的每一种可能性,新建一个明确函数

2、修改表达式的每个分支,使其调用合适的新函数

3、修改每个分支后,编译并测试

4、修改原函数的每一个被调用点,改而调用上述的某个合适的新函数

5、编译,测试

6、所有调用端都修改完毕后,删除原函数

时间: 2024-08-17 06:28:01

重构——47以明确函数取代参数(Replace Parameter with Explicit Methods)的相关文章

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

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

重构——53以工厂函数取代构造函数(Replace Constructor with Factory Method)

以工厂函数取代构造函数(Replace Constructor with Factory Method) 你希望在创建对象时不仅仅是做简单的构造动作:将构造函数替换为工厂函数 一.动机 在派生子类的时候以工厂函数取代类型码 二.做法 1.新建一个工厂函数,让它调用现有的构造函数 2.将调用构造函数的代码改为调用工厂函数 3.每次替换后,编译并测试 4.将构造函数声明为private 5.编译

MSSQL报错:参数数据类型 text 对于 replace 函数的参数 1 无效的解决办法_MsSql

但是我们可以换一种方法解决这个问题.下面就来分析下解决办法. 对text或ntext类型的数据在查询中不能进行字符串操作.这时用得最多的是把text当作varchar(实际内容长度低于8000字节时)或把ntext当作nvarchar(实际内容长度低于4000字节时)来处理.但是这样处理也不是非常妥当毕竟如果text字段内容超过8000了岂不是要被截断或者忽略掉.最终找到了一种方法解决了"参数数据类型 text 对于 replace 函数的参数 1 无效"的问题.下面用一个例子来说明怎

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

令函数携带参数(Parameterize Method) 若干函数做了类似的工作,但在函数本体中却包含了不同的值:建立单一函数,以参数表达那些不同的值 一.动机 去除重复代码,提高灵活性 二.做法 1.新建一个带有参数的函数,使它可以替换先前所有的重复性函数 2.编译 3.将调用旧函数的代码改为调用新函数 4.编译,测试 5.对所有旧函数重复上述步骤,每次替换后,修改并测试

Oracle中自定义函数 无参数 输入参数 输出参数

-- 19-1:建立无参数的函数 CREATE OR REPLACE FUNCTION cur_datetime RETURN VARCHAR2 IS BEGIN RETURN TO_CHAR(sysdate, 'YYYY"年"MM"月"DD"日"HH24″时"MI"分"SS"秒"'); END; / -- 19-2:建立带有输入参数的函数 CREATE OR REPLACE FUNCTION g

[总结]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

C语言二维数组作为函数的参数

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

main函数的参数(一)

C程序最大的特点就是所有的程序都是用函数来装配的.main()称之为主函数,是所有程序运行的入口.其余函数分为有参或无参两种,均由main()函数或其它一般函数调用,若调用的是有参函数,则参数在调用时传递.main(){...y1=f1(x1,x2);...}f1(int a,int b){....Y2=f2(x3,x4);....}f2(int m,int n){.........}在前面课程的学习中,对main()函数始终作为主调函数处理,也就是说,允许main()调用其它函数并传递参数.事

arguments对象验证函数的参数是否合法

  Javascript函数中的参数对象arguments是个对象,而不是数组.但它可以类似数组那样通过数字下表访问其中的元素,而且它也有length属性标识它的元素的个数. 使用arguments对象验证函数的参数是否合法 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 <script> function sum(arg1,arg2) //加法函数 { var realArgCount = argu