你所使用的server class需要一个额外函数,但你无法修改这个class。
在client class中建立一个函数,并以一个server class实体作为第一引数(argument)。
Date newStart = new Date(previousEnd.getYear(), previousEnd.getMonth(), previousEnd.getDate() + 1);
==〉
Date newStart = nextDay(previousEnd);
private static Date nextDay(Date arg) {
    return new Date(arg.getYear(), arg.getMonth(), arg.getDate() + 1);
}
动机
进行本项重构时,如果你以外加函数实现一项功能,那就是一个明确信号;这个函数原本应该在提供服务的(server) class中加以实现。
如果你发现自己为一个server class建立了大量外加函数,或如果你发现有许多classes都需要同样的外加函数,你就不应该再使用本项重构,而应该使用Introduce Local Extensiong(164)。
作法
1. 在client class中建立一个函数,用来提供你需要的功能。
这个函数不应该取用client class的任何特性。如果它需要一个值,把该值当作参数传给它。
2. 以server class实体作为该函数的第一个参数。
3. 将该函数注释为:[外加函数(foreign method),应在server class实现。]
这么一来,将来如果有机会将外加函数搬移到server class中,你便可以轻松找出这些外加函数。
程序中,我需要跨过一个收费周期。原本代码像这样:
Date newStart = new Date(previousEnd.getYear(), previousEnd.getMonth(), previousEnd.getDate() + 1);
我可以将赋值右侧代码提炼到一个函数中,这个函数就是Date Class的一个外加函数。
Date newStart = nextDay(previousEnd);
private static Date nextDay(Date arg) {
    return new Date(arg.getYear(), arg.getMonth(), arg.getDate() + 1);
}
 
                     
                    
                 
                    
                 
 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号