在一个Java应用当中,在A实例调用B实例的方法时,则称A依赖于B。那么如何实现A调用B呢?通常我们的做法是在A中使用new来创建一个B。这种方式被称为硬编码耦合。这样做的坏处在于:如果需要采用另一个类C代替B,那么,我们就不得不修改A中的代码。如果有N个类都依赖于B,并且现在要换成C,那么我们就需要修改N个地方。这是一件可怕的事情。
因此,为了降低耦合,我们可以考虑如下方案:我们采用一个能够制造的工厂IBFactory,B实现IB接口,而IBFactory负责创建IB的实例,A调用IBFactory来得到IB的实例,当系统需要一个更好的B即BetterB时,只需要让BetterB实现IB,并让IBFactory生产BetterB,这样,就完成了重构而不用该太多的代码。
好吧,这样说不怎么清除,还是看代码吧:
public interface IB
{
//定义一个B的接口IB,为方便起见,我们什么都不写,只关注结构
}
public class B implements IB//IB的实现类,同样的,我们什么都不写,只关注结构
{
}
public class IBFactory//定义生产IB实例的工厂
{
public IB getIB()
{
return new B();//工厂生产对象,生产B
}
}
当我们需要在A中使用B的实例的时候,我们就可以这样:
public class A
{
private IB ib;//定义IB接口
public A(IB ib)
{
this.ib = ib;
}
public static void main(String[] args)
{
IBFactory factory=new IBFactory();//首先创建一个工厂
A a=new A(factory.getIB());//通过工厂获得需要依赖的对象
}
}
public class IBFactory//定义生产IB实例的工厂
{
public IB getIB()
{
return new BetterB();//工厂生产对象,生产BetterB
}
}