软件设计重构秘笈9式-08提取接口
概念
本文中的“提取接口” 是指超过一个的类要使用某一个类中部分方法时,我们应该解开它们之间的依赖,让调用者使用接口,这很容易实现也可以降低代码的耦合性。
意图
提取接口可以降低代码的耦合性
如下代码所示,RegistrationProcessor 类只使用到了ClassRegistration 类中的create方法和total 字段,所以可以考虑把他们做成接口给RegistrationProcessor 调用。
案例
public class ClassRegistration {
public void create(){
}
public void transfer(){
}
public double total;
public double getTotal() {
return total;
}
private void setTotal(double total) {
this.total = total;
}
}
public class RegistrationProcessor {
public double processRegistration(ClassRegistration registration) {
registration.create();
return registration.total;
}
}
重构
重构后的代码如下,我们提取了一个IClassRegistration 接口,同时让ClassRegistration 继承此接口,
然后调用端RegistrationProcessor 就可以直接通过IClassRegistration 接口进行调用。
public interface IClassRegistration {
void create();
double getTotal();
}
public class ClassRegistration implements IClassRegistration{
@Override
public void create() {
}
@Override
public double getTotal() {
return 0;
}
public void transfer(){
}
}
public class RegistrationProcessor {
public double processRegistration(IClassRegistration iClassRegistration) {
iClassRegistration.create();
return iClassRegistration.getTotal();
}
}
总结
这个重构策略也是一个常见的运用,很多设计模式也会在其中运用此思想(如简单工程、抽象工厂等都会通过接口来解开依赖)。