你有一个大型函数,其中对局部变量的使用使你无法采用Extra Method()
将这个函数放进一个单独对象中,如此一来局部变量就成了对象内的字段。然后你可以在同一个对象中将这个大型函数分解为多个小型函数。
Class Order...
double price(){
double primaryBasePrice;
double secondaryBasePrice;
double tertiaryBasePrice;
//long computation
............
}
动机:
如果一个函数中局部变量泛滥成灾,那么想分解这个函数是非常困难的。Replace Temp with Query 可以助你减轻这一负担,但有时候你会发现根本无法拆解一个需要拆解的函数。这种情况下,你应该把手伸进工具箱的深处,祭出函数对象(Method Object)这件法宝。
Replace Method with Method Object会将所有局部变量都变成函数对象的字段。然后你就可以对这个新对象使用Extract Method创造出新的函数,从而将原本的大型函数拆解变短