| 使用场景 | 实现方式 |
|---|---|
| 完成一个功能需要整合不同的维度,两个维度又不相干,不能是用继承去解决,这时候就使用桥接模式去实现 | 有几个定义不同维度动作的接口或者抽象类,通过一个Implementor 去组合他们不同的实现,例如有 a 与 b, 在 b 中 调用提供的 a |
| 项目中实践 | 在做 IM 项目的时候使用了这种模式,具体地,就是桥接实现了消息处理和消息分发的功能,这样可以最小限度的影响原有代码,使得原来的代码不会受到大影响 |
架构图

package com.example.xpj.bridges;
public class DPBridge {
// 抽象类,代表笔的维度
public static abstract class Pen {
protected Color color;
public void setColor(Color color) {
this.color = color;
}
public abstract void draw(String name);
}
// 扩充抽象类
public static class SmallPen extends Pen {
public void draw(String name) {
String penType = "小号毛笔绘制";
this.color.bepaint(penType, name);
}
}
// 扩充抽象类
public static class BigPen extends Pen {
public void draw(String name) {
String penType = "大号毛笔绘制";
this.color.bepaint(penType, name);
}
}
// 实现类接口,颜色的维度,这里实现笔和需要画画的组合
public interface Color {
void bepaint(String penType, String name);
}
// 扩充实现类
public static class White implements Color {
public void bepaint(String penType, String name) {
System.out.println(penType + "白色的" + name + ".");
}
}
// 扩充实现类
public static class Black implements Color {
public void bepaint(String penType, String name) {
System.out.println(penType + "黑色的" + name + ".");
}
}
// 客户端
public static class DPBridgeClient {
public void testBridge() {
// 白色
Color white = new White();
Pen square = new BigPen();
square.setColor(white);
square.draw("乌拉拉");
// 长方形
Pen rectange = new SmallPen();
rectange.setColor(new Black());
rectange.draw("小黄狗");
}
}
}
总结
桥接模式最大功能就是放大了代码中组合这一功能,打破了 Java 或者 Kotlin 单继承的限制,使用起来对使用者暴露最少,可以专注于业务自己的代码实现而不侵入原有代码,因为这个 Bridge 可以自由无限组合。
来一张我自己项目中的类结构:
