简述
Replace Method with Method Objects(以函数对象取代函数)指有一个大型函数,其中对局部变量的使用使你无法采用Extract Method,将这个函数放入一个单独对象,如此一来局部变量就成了对象内的字段。
class Order...
double price(){
double primaryBasePrice;
double secondaryBasePrice;
double tertiaryBasePrice;
// long computation;
}
改为
动机
小型函数优美动人,但是局部变量的存在增加分解函数的难度。Replace Temp with Query可以助你减轻这一负担,但有时候你会发现根本无法拆解一个需要拆解的函数。因此你必须祭出函数对象这件法宝
做法
- 建立一个新类,根据待处理函数用途,为这个类命名
- 新类中建立一个final字段,用以保存原先大型函数所在对象。称之为源对象。同时针对原函数的临时变量和每个参数,在新类中建立一个对应字段保存
- 在新类中建立一个构造函数,接收源对象和原函数的所以参数作为参数。
- 在新类中建立一个compute()函数
- 将源函数的代码复制到compute()函数中。如果需要调用源对象的任何函数,请通过源对象字段调用
- 编译
- 将旧函数的函数本体替换为这样“创建上述新类的一个新对象,而后调用其中的compute()函数”