介绍:将抽象部分与实现部分分离,使他们都可以独立地变化。这个设计使用多态实现
场景:看到桥接模式,我先想到的是桥梁……所以我就举个桥梁的例子来说明。对于桥梁,有两种:中国桥和美国桥。对于建筑师,也有两种:中国建筑师和美国建筑师。首先,说下原来的业务,中国建筑师只会造中国桥,美国建筑师会造美国桥。但是中国建筑师牛逼啊,学会了美国桥的建造。如果没有使用桥接模式,可能代码上会有很多问题。
首先,我们有两个基础接口:1.建筑师-负责建造,2.桥梁-被建造
建筑师
public interface Architect {
public void build();
}
中国建筑师
public class ChineseArchitect implements Architect {
@Override
public void build() {
System.out.println("this is a ChineseArchitect");
}
}
桥梁
public interface Bridge {
public void beBuild();
}
美国建筑师
public class USArchitect implements Architect {
@Override
public void build() {
System.out.println("this is a USArchitect");
}
}
中国桥
public class ChineseBridgeByChineseArchitect implements Bridge {
@Override
public void beBuild() {
System.out.println("buil a ChinaBridge by ChineseArchitect");
}
}
这里有两种做法,桥梁绑定建筑师,或者建筑师绑定桥梁,我选择了桥梁绑定建筑师。
中国桥
public class ChineseBridge implements Bridge {
private Architect architect;
public ChineseBridge(Architect architect) {
this.architect = architect;
}
@Override
public void beBuild() {
architect.build();
System.out.println("buil a ChinaBridge");
}
}
美国桥
public class USBridge implements Bridge {
private Architect architect;
public USBridge(Architect architect) {
this.architect = architect;
}
@Override
public void beBuild() {
architect.build();
System.out.println("build a USBridge");
}
}
开始造桥
Architect cArchitect = new ChineseArchitect();
Architect uArchitect = new USArchitect();
Bridge ccbBridge = new ChineseBridge(cArchitect);
Bridge ucBridge = new USBridge(cArchitect);
Bridge uuBridge = new USBridge(uArchitect);
ccbBridge.beBuild();
System.out.println("=======");
ucBridge.beBuild();
System.out.println("=======");
uuBridge.beBuild();
输出示例
this is a ChineseArchitectbuil a ChinaBridge =======
this is a ChineseArchitectbuild a USBridge =======
this is a USArchitect
build a USBridge
总结:
很好的体现了六大原则,保证模块的解耦,并且很方便扩展。我们这里如果需要扩展桥梁,只需要增加一个桥梁类。如果想要在维度上扩展,只需要在新的接口的具体实现类中添加桥梁类,并调用beBuild()方法即可。
提枪策马乘胜追击04-21 20:01
代码小兵92504-17 16:07
代码小兵98804-25 13:57
杨晶珍05-11 14:54