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