桥接模式

介绍

**定义:**将抽象部分与实现部分分离, 使它们都可以独立变化. 用于处理多继承存在的问题, 用抽象关联来取代传统的多层继承, 将类之间的静态继承关系转变为动态的组合关系, 使系统更加灵活且更易于拓展. 有效控制了系统中类的个数, 避免了继承层次的指数级爆炸.

为了方便理解, 在这里举个例子:

假设自己要在网上卖衣服, 衣服的颜色有红/黄/蓝/绿四种, 每种颜色的衣服又有S/M/L/XL四种尺码, 如果按照常规的继承结构设计的话, 从顶层的衣服类开始向下继承: 每种颜色+尺码的组合都将会是一个单独的类. 简单计算, 此时总共需要4 * 4 = 16个类(红S, 红M, 红L, 红XL, 绿S....), 如果颜色和尺码都分别增加一个呢(5 * 5 = 25)? 只是多增加了一个尺码和一种颜色就瞬间多出了9个类, 而随着颜色和尺码的不断增加, 子类的个数将会呈现出指数级的增长.

UML

示例

java 复制代码
package com.sumlv.demo;

import com.sumlv.demo.bridge.Clothes;
import com.sumlv.demo.bridge.SmallSizeClothes;
import com.sumlv.demo.service.impl.RedColor;

public class Main {

    public static void main(String[] args) {
        Clothes clothes = new SmallSizeClothes(new RedColor());
        clothes.wearing();
    }

}
java 复制代码
package com.sumlv.demo.bridge;

/**
 * 衣服类(抽象化角色)
 *
 * @Auther: yuzhuo.song
 * @Date: 2026-03-07
 */
public abstract class Clothes {

    protected Color color;

    public Clothes(Color color) {
        this.color = color;
    }

    public abstract void wearing();

}
java 复制代码
package com.sumlv.demo.bridge;

/**
 * 小号衣服(拓展抽象化角色)
 *
 * @Auther: yuzhuo.song
 * @Date: 2026-03-07
 */
public class SmallSizeClothes extends Clothes {

    private static final String SIZE = "小号";

    @Override
    public void wearing() {
        System.out.println("开始穿衣服");
        System.out.println("衣服的颜色为:" + color.getColor());
        System.out.println("衣服的尺码为:" + SIZE);
        System.out.println("衣服穿好了");
    }

    public SmallSizeClothes(Color color) {
        super(color);
    }

}
java 复制代码
package com.sumlv.demo.bridge;

/**
 * 颜色接口(实现化角色)
 *
 * @Auther: yuzhuo.song
 * @Date: 2026-03-07
 */
public interface Color {

    String getColor();

}
java 复制代码
package com.sumlv.demo.service.impl;

import com.sumlv.demo.bridge.Color;

/**
 * 红色(具体实现化角色)
 *
 * @Auther: yuzhuo.song
 * @Date: 2026-03-07
 */
public class RedColor implements Color {

    @Override
    public String getColor() {
        return "红色";
    }

}

总结

使用场景

  1. 统一协议下增加不同组件时, 如: JDBC驱动(连接步骤相同, 数据库间实现不同), 消息驱动(发送流程相同, 通信实现不同);

  2. 拆分复杂对象时(过于复杂的对象不方便维护和理解, 可以根据实际需要对不同维度进行拆分);

  3. 对代码进行多维度拓展时,如功能/技术/业务维度等.

优缺点

优点:

  1. 通过分离对象中实体和功能维度的方式解耦了其固有的绑定关系, 使得实体和抽象可以沿着各自的维度灵活的进行拓展;

  2. 提供了比多层继承更优的解决方案(多层继承复用性差, 子类数量庞大, 违背了单一职责原则);

  3. 提高了系统的拓展性, 不同维度中任意一个维度的拓展都不需要修改原有系统, 符合开闭原则.

缺点:

  1. 增加了系统的设计和理解难度. 由于关联关系建立在抽象层, 所以要求设计者从一开始就要对抽象层进行良好的设计;

  2. 需要正确识别出系统中的不同维度并进行拆分, 需要开发者有较为丰富的开发经验.

相关推荐
Initialize-le2 小时前
WMware桥接模式配置静态IP上网
网络协议·tcp/ip·桥接模式
开开心心就好19 天前
实用系统备份还原,小巧免PE备份快镜像小
windows·计算机视觉·pdf·计算机外设·迭代器模式·excel·桥接模式
开开心心就好21 天前
实用PDF擦除隐藏信息工具,空白处理需留意
运维·服务器·windows·pdf·迭代器模式·桥接模式·1024程序员节
资深web全栈开发1 个月前
设计模式之桥接模式 (Bridge Pattern)
javascript·设计模式·桥接模式
进阶的猪1 个月前
VMware桥接模式(bridge模式)不能使用的原因和解决方法
桥接模式
茶本无香1 个月前
设计模式之十一—桥接模式:解耦抽象与实现的艺术
设计模式·桥接模式
BeBThMqi2 个月前
无人船编队 无人车编队 MPC 模型预测控制 多智能体协同控制 一致性 MATLAB 无人车 USV
桥接模式
小码过河.2 个月前
设计模式——桥接模式
桥接模式
会员果汁2 个月前
18.设计模式-桥接模式
设计模式·桥接模式