概念
是用于把抽象化与实现化解耦,使得二者可以独立变化的结构型设计模式。
借助菜鸟教程的一张图:
这里就把形状和颜色解耦了,其实本来是要实现红色的圆和绿色的圆的,但这样解耦的好处是啥呢,就是我们要实现红色的矩形就会变的十分easy。只要再继承Shape实现一下矩形就ok了,而不需要单独实现红色矩形与绿色矩形。
直接上代码
这里我们就以笔和 颜色举例。
抽象颜色接口,用于拓展颜色
public interface Color {
String getColor();
}
具体颜色
public class RedColor implements Color{
@Override
public String getColor() {
return "Red";
}
}
public class BlueColor implements Color{
@Override
public String getColor() {
return "Blue";
}
}
抽象 笔
这里获取了一个颜色对象的引用,这样我们就可以根据传入的不同颜色来实现不同颜色的笔了,而不需要单独构造某个颜色的笔
public abstract class Pen {
protected Color color;
public Pen(Color color) {
this.color = color;
}
public abstract void write();
}
具体的铅笔
public class Pencil extends Pen{
public Pencil(Color color) {
super(color);
}
@Override
public void write() {
System.out.println("write "+color.getColor());
}
}
测试类
public class BridgeClient {
public static void main(String[] args) {
Pen redPencil = new Pencil(new RedColor());
Pen bluePencil = new Pencil(new BlueColor());
redPencil.write();
bluePencil.write();
}
}
End
在我看来,当一个类的两个属性是独立变化,且需要拓展的时候,就到了桥接模式出场了。
其实桥接模式就像把一个拓展的对象集合,变成了一个坐标系。
大概就这样子,交叉点就是要实现的对象。
优点: 抽象和实现的分离、优秀的扩展能力、实现细节对客户透明。
缺点: 必须必须必须要正确的看到系统变化的维度。