一句话理解:桥接模式把抽象与实现拆成两个可独立扩展的维度,并通过组合连接它们,避免为每种组合创建子类。
核心问题:两个维度同时变化
假设武器有手枪、步枪,射击方式有单发、连发。用继承实现会出现
SinglePistol、BurstPistol、SingleRifle 等组合类。每增加一个维度,类数量都会快速膨胀。桥接把“武器类型”和“射击策略”分开。
C# 示例
现在可以自由组合:
新增武器不必修改射击方式,新增射击方式也不必修改武器层级。
何时使用
- 两个维度都需要独立扩展
- 平台实现与业务抽象分离,例如存储接口与本地/云端实现
- 渲染对象与渲染后端分离
- UI 控件与主题皮肤分离
与策略、适配器的区别
桥接通常在设计阶段拆分两个长期变化的层级;策略侧重运行时替换一段算法;适配器通常在系统完成后解决既有接口不兼容。它们结构可能相似,意图不同。
权衡
桥接减少组合子类,却增加委托关系。只有一个维度变化时,普通组合或策略就够了。Unity Inspector 需要配置接口实现时,可用抽象
ScriptableObject 或 SerializeReference 解决序列化边界。小结
看到“类型 A × 类型 B”的组合矩阵时,应考虑桥接。它把乘法式的类数量改成两个可独立增长的集合。