动机
小型函数优美动人。只要将相对独立的代码从大型函数中提炼出来,就可以大大提高代码的可读性。但是,局部变量的存在会增加函数分解难度。Replace Temp with Query可以帮助你减轻这一负担,但有时候你会发现根本无法拆解一个需要拆解的函数。这种情况下,你应该把手伸进工具箱的深处。祭出函数对象这件法宝。
做法
- 建立一个新类,根据待处理函数的用途,为这个类命名。
- 在新类中建立一个final字段,用以保存原先大型函数所在的对象。我们将这个字段称为“源对象”。同时,针对原函数的每一个临时变量和每一个参数,在新类中建立一个对应的字段保存中。
- 在新类中建立一个构造函数,接受源对象及原函数的所有参数作为参数。
- 在新类中建立一个compute()函数。
- 将原函数的代码复制到compute()函数中。如果需要调用源对象的任何函数,请通过源对象字段调用。
- 编译。
- 将旧函数的函数本体替换为这样一条语句:“创建上述新类的一个新对象,而后调用其中的compute()函数“。
范例
Class Account
int gamma(int inputVal, int quantity, int yearToDate) {
int importantValue1 = (inputVal * quantity) + delta();
int importantValue2 = (inputVal * yearToDate) + 100;
if ((yearToDate - importantValue1