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

                                               

动机:

你可能会发现这样两个函数:它们做着类似的工作,但因少数几个值致使行为略有不同。这种情况下,你可以将这些各自分离的函数统一起来,并通过参数来处理那些变化情况,用以简化问题。这样的修改可以去除重复代码,并提高灵活性,因为你可以用这个参数处理更多的变化情况。

做法:

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

2.编译。

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

4.编译,测试。

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

也许你会发现,你无法用这种办法处理整个函数,但可以处理函数中的一部分代码。这种情况下,你应该首先将这部分代码提炼到一个独立函数中,然后再对那个提炼所得的函数使用Parameterize Method。

范例:

protected Dollars baseCharge(){double result = Math.min(lastUsage(), 100) * 0.03;if(lastUsage() > 100){result += (Math.min(lastUsage(), 200) - 100) * 0.05;}if(lastUsage() > 200){result += (lastUsage() -200) * 0.07;}return new Dollars(result);
}

上述代码可以替换如下:

protected Dollars baseCharge(){double result = usageInRange(0, 100) * 0.03;result += usageInRange(100, 200) * 0.05;result += usageInRange(200, Integer.MAX_VALUE) * 0.07;return new Dollars(result);
}protected int usageInRange(int start, int end){if(lastUsage() > start){return Math.min(lastUsage(), end) - start;}else{return 0;}
}

本项重构的要点在于:以“可将少量数值视为参数”为依据,找出带有重复性的代码。

转载于:https://my.oschina.net/u/134516/blog/219872

Parameterize Method (令函数携带参数)相关推荐

  1. 重构函数调用-Parameterize Method令函数携带参数五

    重构函数调用-Parameterize Method令函数携带参数五 1.令函数携带参数 1.1.使用场景 若干函数做了类似的工作,但在函数本体中却包含了不同的值.建立单一函数,以参数表达那些不同的值 ...

  2. 【Groovy】Groovy 动态语言特性 ( Groovy 中函数实参自动类型推断 | 函数动态参数注意事项 )

    文章目录 前言 一.Groovy 中函数实参自动类型推断 二.函数动态参数注意事项 三.完整代码示例 前言 Groovy 是动态语言 , Java 是静态语言 ; 本篇博客讨论 Groovy 中 , ...

  3. Python之pandas:pandas.set_option函数的参数详细解释

    Python之pandas:pandas.set_option函数的参数详细解释 目录 pandas.set_option函数的参数解释 函数API:pandas.set_option pandas. ...

  4. 将函数当做参数 matlab,Matlab中如何将(自定义)函数作为参数传递给另一个函数...

    假如我们编写了一个积分通用程序,想使它更具有通用性,那么可以把被积函数也作为一个参数.在c/c++中,可以使用函数指针来实现上边的功能,在matlab中如何实现呢?使用函数句柄--这时类似于函数指针的 ...

  5. 【php7扩展开发四】函数的参数 ,引用传参 ,返回值

    函数参数解析 之前我们定义的函数没有接收任何参数,那么扩展定义的内部函数如何读取参数呢?用户自定义函数在编译时会为每个参数创建一个zend_arg_info结构,这个结构用来记录参数的名称.是否引用传 ...

  6. React Native之通过createStackNavigator实现携带参数的页面与页面之间的跳转

    1  实现的功能 在网上看React Native文档,我特码就想实现一个页面到另外一个页面的跳转,然后另外一个页面怎么获取参数,特么没找到一个说清楚的,要么太复杂,要么说了不理解,下面是我自己写的一 ...

  7. js有默认参数的函数加参数_函数参数:默认,关键字和任意

    js有默认参数的函数加参数 PYTHON开发人员的提示 (TIPS FOR PYTHON DEVELOPERS) Think that you are writing a function that ...

  8. python中__init__函数以及参数self

    1.class类包含: 类的属性:类中所涉及的变量 类的方法:类中函数 2. _init_函数(方法) 首先说一下,带有两个下划线开头的函数是声明该属性为私有,不能在类地外部被使用或直接访问. ini ...

  9. python函数修饰参数_Python 函数参数的填坑之路

    背景 最近在看廖雪峰老师的python3教程之函数的参数 受益匪浅,但是在实践的过程中,发现了一些不解之谜 两个错误import _thread import time def func1(x): w ...

  10. 函数传参数_算法笔记(7)第二章C、C++快速入门函数,main函数,

    #includevoid change(int x){ x=x+1;}int main(){ int x=10; change(x); prinf("%d\n",x); retur ...

最新文章

  1. python连sql server学生管理系统_Python 跨平台连接 SQL Server
  2. 高薪必备的一些Spring Boot高级面试题
  3. mybatis学习5复杂查询之多对一的处理
  4. 阿里巴巴上线静态开源站点搭建工具 Docsite
  5. js文件,同样的路径,拷贝过来的为什么不能访问
  6. 解决“The executable was signed with invalid entitlements.”问题
  7. java log4j基本配置及日志级别配置详解,java基础面试笔试题
  8. Linux系统故障排查和修复技巧
  9. python 指定时间内_python获取指定时间段内的随机不重复的时间点
  10. x-pack 功能介绍及配置传输层安全性(TLS / SSL)
  11. 2星|《零工经济》:缺少对数据、事实、概括、分析,基本是流于表面的畅想...
  12. AMR文件时长解析——附c代码
  13. android app unlock sim pin,android Sim卡锁定 pin解锁流程学习
  14. 蓝桥杯---试题 历届试题 填字母游戏(博弈)
  15. 手机浏览器,怎么访问电脑版的网页?
  16. 相机的变焦,对焦和景深的理解和照相機的成像原理
  17. 京东jos 获取授权及php-sdk的使用示例
  18. 3d稀疏卷积——spconv源码剖析(三)
  19. 如何下载tomcat各个版本
  20. 更改w10计算机时间,win10系统把时间改为12小时制的办法

热门文章

  1. 网站被挂马了怎么办?
  2. xcode6 下载地址
  3. 论文:Object-centric Auto-encoders and Dummy Anomalies for Abnormal Event Detection in Video阅读遇到的问题及解答
  4. PowerBI 开发 第22篇:发现异常(Find Anomalies)
  5. Mono.Cecil 初探(一):实现AOP
  6. 南水北调中线调水量仅占丹江口水库水量1/4
  7. 上海数据交易中心交易系统开放
  8. 计算机二级主要是学什么,计算机二级ms office考的都是什么内容
  9. 数据库相关类型(日期、复合、bit、布尔)
  10. Simon‘s writting 全网最全笔记