6.2 Inline Method(内联函数)

概括
一个函数的内部代码与名称同样清晰易懂。
在函数调用点插入函数本体,然后移除该函数。
   例子
int getRating(){
    return (moreThanFiveLateDeliveries()) ? 2 : 1;
}
boolean moreThanFiveLateDeliveries(){
    return _numberOfLateDeliveries > 5;
}

          重构之后
int getRating(){
    return (_numberOfLateDeliveries > 5) ? 2 : 1;
}

动机
  1. 函数名和函数内部代码同样清晰可读
  2. 一群组织不甚合理的函数:将它们都内联到一个大型函数中,再从中提炼出组织合理的小型函数(实施Replace Method with Method Object之前先这么做,往往可以获得不错的效果)
  3. 如果使用了太多间接层,使得系统中所有函数都似乎只是对另一个函数的简单委托。
    (间接层是有价值的,但不是所有的间接层都有价值。试着使用内联手法,可以找出那些有用的间接层,同时将那些无用的间接层去除)
做法
  1. 检查函数,确定它不具备多态性
    (如果子类重写了这个函数,就不要将此函数内联)
  2. 找出这个函数所有被调用的地方
  3. 将这个函数的所有被调用处都替换为函数本体
  4. 编译,测试
  5. 删除该函数定义
实践
Inline Method并不简单。
递归调用,多返回点,内联至另一个对象中而该对象并无提供访问函数 这些情况很复杂
如果遇到了这样的复杂情况,那么就不应该用这个重构方法




posted @ 2013-11-27 10:38  tanhaiyuan  阅读(197)  评论(0编辑  收藏  举报