【设计模式】Bridge模式(桥接模式)

时间:2021-10-19 08:01:31

最近的一次面试中,被问到桥接模式,以前呢并没有很仔细的研究过这个设计模式,借此机会剖析一下。

先给出自己对这个模式理解后的源码:

interface A{
void methodA();
} interface B{
void methodB();
} Class AImpl implements A{
Interface B;
void methodA{
B.methodB();
}
}

那么设个设计模式的应用场景呢?

从参考资料1中的解释是,调制解调器Modem,旧版OldModem采用的的dial和answer的模式,新版采用send和receive的模式。

整个模式的构建如下:

interface OldModem{
void dial();
void answer();
} interface NewModem{
void send();
void receive();
} //兼容OldModem的新Modem的实现
Class CapitableOldModemImpl implements OldModem{
NewModem newModem;
CapitableOldModemImpl(NewModem param){
newModem = param;
}
void dial{
newModem.send();
}
void answer{
newModem.receive();
}
}

 从这个可以看出来,OldModem自成一个体系,NewModem也是自成一个体系,那么以前的老产品继续继承自 OldModem就可以了,新的NewModem不想兼容OldModem那就直接集成NewModem就行了。

但是当新的Modem需要兼容老的OldModem的时候,这个时候就需要CapitableOldModemImpl这种形式了,讲两种抽象组合在一起。

那么有人就会说了,你这么设计的手段不就是组合两个接口吗,那么跟Adapter有什么区别?

  从我自己的理解:Adapter模式是为了解决接口适配问题,更多的是对实现做变换。Bridge是为了将两种不同的抽象分离,达到独立变化的目的。 从我们的这个例子中我们可以看出来,就是为了解决新老接口的是适配问题。但是Aadpter是1:1的适配,这里的适配是两个大类型的适配,可以做到m:n适配。

  参考文献:

    【1】马丁著, 邓辉译.敏捷软件开发(原则模式与实践).P283(Bridge模式).