当先锋百科网

首页 1 2 3 4 5 6 7

将这个函数放进一个单独对象中,如此一来局部变量就成了对象内的字段,。然后你可以再同一个对象中将这个大型函数分解为多个小型函数。

将获取的参数变量封装到另一个对象中。

1. 动机

  1. 小型函数能大大提高代码的可读性。但是局部变量的存在会增加函数分解难度。如果一个函数之中局部变量泛滥成灾,那么想分解这个函数是非常困难的。Replace Temp with Query(以查询取代临时变量)可以帮助你减轻这一负担,但有时候你会发现根本无法拆解一个需要拆解的函数。就可以使用该方法。
  2. Replace Method with Method Object会将所有局部变量都变成函数对象的字段。然后你可以对这个新对象使用Extract Method(提炼函数)创造出新函数,从而将原来的大型函数拆解变短。

2. 做法

  1. 建立一个新类,根据待处理函数的用途,为这个类命名
  2. 在新类中建立一个final字段,用以保存原先大型函数所在的对象。我们将这个字段称为“源对象”。同时,针对源函数的每个临时变量和每个参数,在新类中建立一个对应的字段保存之。
  3. 在新类中建立一个构造函数,接收源对象及原函数的所有参数作为参数。
  4. 在新类中建立一个Compute()函数。
  5. 将原函数的代码赋值到Compute()函数。
  6. 将原函数的代码赋值到Compute()函数中。如果需要调用源对象的任何函数,请通过源对象字段调用。
  7. 编译
  8. 将旧函数的函数本体替换为这样一条语句:“创建上述新类的一个新对象,而后调动其中的Compute()函数”。
    现在进行到很有趣的部分了。由于所有局部变量现在都成了字段,所以你可以任意分解这个大型函数,不必传递任何参数。