【Java】23种设计模式——7.桥接模式
概念
桥接模式 桥接模式,解决扩展带来的爆炸问题。
同一种产品有着不同的配置,就像手机有:运行内存 4 6 8g,存储内存:64 128 256g,芯片:骁龙 A系列 麒麟 联发科 猎户座。不能每一种配置都写一个类就太麻烦了,所以有了桥接模式,可以通过多个类桥接成一个产品类 。
桥接模式角色
| 角色 | 职责 | 示例场景 |
|---|---|---|
| 抽象化(Abstraction) | 定义抽象接口,持有实现部分的引用 | 图形抽象类(如 Shape) |
| 扩展抽象化(RefinedAbstraction ) | 扩展抽象类的功能,调用实现部分的方法 | 具体形状(如 Circle) |
| 实现化接口(Implementor) | 定义实现部分的抽象接口 | 颜色渲染接口(如 Color) |
| 具体实现类(ConcreteImplementor) | 实现 Implementor 接口的具体逻辑 |
具体颜色(如 Red、Blue |
适用场景
- 电子产品的不同配置
- 存在多个独立变化的维度(形状颜色渲染引擎)
- 需要在运行时动态切换实现方式(如切换数据库驱动)
- 避免继承导致的类层次结构过于深(跨平台UI组件开发)
使用
现在假设手机有不同的配置,存储内存和芯片。
-
定义实现化接口(定义内存)
/** * 实现化接口 :内存 * @Author:lyj * @Date:2025/5/5 17:39 */ public interface Size { String getSize(); } -
具体实现 (实现具体内存的大小)
具体实现,继承实现化接口。设置公共方法的初始化(这里指的是内存初始化)。
/** * 具体实现类 ;64G 内存 * @Author:lyj * @Date:2025/5/5 17:43 */ public class M64G implements Size{ @Override public String getSize() { return "64G内存"; } } /** * 具体实现类 : 128G内存 * @Author:lyj * @Date:2025/5/5 17:44 */ public class M128G implements Size { @Override public String getSize() { return "128G内存"; } } /** * 具体实现类 : 256G内存 * @Author:lyj * @Date:2025/5/5 17:45 */ public class M256G implements Size{ @Override public String getSize() { return "256G内存"; } } -
定义抽象化角色(手机抽象类)
/** * 抽象化角色 : 手机 (可以自定义存储内存大小) * @Author:lyj * @Date:2025/5/5 17:37 */ public abstract class AbstractPhone { // 存储内存。这里为了简单理解,不写芯运行内存 public Size size; public AbstractPhone(Size size) { this.size = size; } public abstract String getType(); // 芯片类型 } /** * 抽象角色 : 手机(可以自定义芯片类型和存储内存大小) * @Author:lyj * @Date:2025/5/5 17:54 */ public abstract class RefinedAbstractPhone extends AbstractPhone { protected RefinedAbstractPhone(Size size) { super(size); } /** * 添加尺寸维度获取方式 * @return */ public String getSize() { return size.getSize(); } } -
扩展抽象化角色 (手机具体的实现类)
/** * 扩展抽象化角色 : HUAWEI手机 * @Author:lyj * @Date:2025/5/5 17:59 */ public class HUAWEI1 extends RefinedAbstractPhone { /** * 构造方法 : 指定具体内存大小 * @param size */ public HUAWEI1(Size size) { super(size); } @Override public String getType() { return "高通骁龙8 至尊版"; } } /** * 扩展抽象化角色 : HUAWEI手机 * @Author:lyj * @Date:2025/5/5 17:59 */ public class HUAWEI2 extends RefinedAbstractPhone { /** * 构造方法 : 指定具体内存大小 * @param size */ public HUAWEI2(Size size) { super(size); } @Override public String getType() { return "华为麒麟9100"; } }运行测试和显示(以注释方式表示)
HUAWEI1 huawei1 = new HUAWEI1(new M256G()); System.out.println(huawei1.getType() + " " + huawei1.getSize()); // 高通骁龙8 至尊版 256G内存 HUAWEI2 huawei2 = new HUAWEI2(new M128G()); System.out.println(huawei2.getType() + " " + huawei2.getSize()); // 华为麒麟9100 128G内存
有志者,事竟成,破釜沉舟,百二秦关终属楚; 苦心人,天不负,卧薪尝胆,三千越甲可吞吴。

浙公网安备 33010602011771号