桥接模式是把抽象与具体的实现解耦,它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(interface)模式,它提供了抽象化和实现化之间的桥梁,来实现二者的解耦。
概念比较晦涩难懂,下面通过一个例子来理解一下桥接模式。
首先我们有一个驾驶的接口,驾驶自行车、驾驶小汽车都是实现了驾驶接口:
public interface Drive {
void drive();
}
public class DriveBicycle implements Drive {
@Override
public void drive() {
System.out.println("骑自行车");
}
}
public class DriveCar implements Drive {
@Override
public void drive() {
System.out.println("开小汽车");
}
}
人类可以驾驶,通过抽象出一个人类驾驶抽象类,作为人和驾驶之间的桥梁,把这两者关联起来:
public abstract class PeopleDrice {
protected Drive drive;
protected PeopleDrice(Drive drive) {
this.drive = drive;
}
public abstract void drive();
}
现在就可以继承PeopleDrice来让不同的的人体会驾驶的乐趣:
public class ManDrive extends PeopleDrice {
public ManDrive(Drive drive) {
super(drive);
}
@Override
public void drive() {
drive.drive();
}
public static void main(String[] args) {
ManDrive manDrive = new ManDrive(new DriveBicycle());
manDrive.drive();
ManDrive manDrive1 = new ManDrive(new DriveCar());
manDrive1.drive();
}
}
运行结果如下图所示:
驾驶行为和人类是两个独立的系统,通过一个桥梁PeopleDrice就可以使这两者进行桥接。
桥接模式优点
- 抽象与实现进行分离。
- 良好的扩展性。扩展不用修改原有代码,符合开闭原则。
- 具体细节对使用者透明。在抽象层已经完成了封装。
- 可以极大的减少子类的个数,从而降低管理和维护的成本。
桥接模式缺点
- 会增加系统的复杂度。使系统难以理解,聚合关系在抽象层进行定义,这就要求开发者具有良好的抽象思维。