桥接模式
该模式适合后期业务需要大规模的扩展的情况
如果单纯的使用继承来做则非常复杂,桥接模式则利用双层抽象与分离的方式,使后期维护变得简单
该模式和适配器那种亡羊补牢的方式不同,它应在开发时就被设计
// 本例用电视与遥控器来解释桥接模式
//
// 电视的抽象 与 两种电视的实现类
interface ITv {
void on();
void off();
}
class SonyTv implements ITv {
@Override public void on() {
System.out.println("Sony Tv on!");
}
@Override public void off() {
System.out.println("Sony Tv off!");
}
}
class LGTv implements ITv {
@Override public void on() {
System.out.println("LG Tv on!");
}
@Override public void off() {
System.out.println("LG Tv off!");
}
}
// 遥控器抽象, 其中包括对TV的引用
// 它可以接受任何品牌的电视,并可以进行开/关操作
abstract class RemoteController {
protected ITv tv;
public RemoteController(ITv tv) {
this.tv = tv;
}
public void on() {
tv.on();
}
public void off() {
tv.off();
}
}
// 此时,小米想做一个所有电视的通用型遥控器
// 使用前只需要拥有一台对应的电视(对象),然后让遥控器配对一次即可(构造)
class MiRemoteController extends RemoteController {
public MiRemoteController(ITv tv) {
super(tv);
}
}
// 测试
// Test Bridge Pattern
public class main {
public static void main(String[] argv) {
// 配对索尼电视
RemoteController miSonyRemoteControl = new MiRemoteController(new SonyTv());
// 操作
miSonyRemoteControl.on();
miSonyRemoteControl.off();
// 配对LG电视
RemoteController miLGRemoteControl = new MiRemoteController(new LGTv());
// 操作
miLGRemoteControl.on();
miLGRemoteControl.off();
}
}
/*
输出:
Sony Tv on!
Sony Tv off!
LG Tv on!
LG Tv off!
*/