23种设计模式-桥接(Bridge)设计模式

桥接设计模式

🚩什么是桥接设计模式?

桥接模式(Bridge Pattern)结构型设计模式 ,它将 抽象部分实现部分 分离,使它们可以 独立变化 。桥接模式通过 组合 而不是继承来实现抽象与实现的解耦。

使用场景

  • 当需要 避免抽象与实现之间的永久绑定 时。

  • 抽象部分实现部分 都需要 独立扩展 时。

  • 当需要 在运行时切换实现 时。

🚩桥接设计模式的特点

  • 分离抽象与实现:桥接模式将抽象部分与实现部分分离,使它们可以独立变化。

  • 灵活性:抽象部分和实现部分可以独立扩展,互不影响。

  • 可扩展性:新增抽象或实现时,无需修改现有代码。

  • 解耦:通过组合关系替代继承关系,降低系统的耦合度。

🚩桥接设计模式的结构

桥接模式主要包含以下部分:

  • Abstraction(抽象部分):定义抽象接口,并维护一个对 实现部分 的引用。

  • RefinedAbstraction(扩展抽象部分):对抽象部分进行扩展,提供更多的功能。

  • Implementor(实现部分接口):定义实现部分的接口,供抽象部分调用。

  • ConcreteImplementor(具体实现部分):实现 Implementor 接口,提供具体的实现。

🚩桥接设计模式的优缺点

✅ 优点

  • 分离抽象与实现:抽象部分和实现部分可以独立变化,互不影响。

  • 灵活性:可以在运行时动态切换实现。

  • 可扩展性:新增抽象或实现时,无需修改现有代码。

  • 解耦:通过组合关系替代继承关系,降低系统的耦合度。

❌ 缺点

  • 增加复杂性:桥接模式引入了更多的类和对象,增加了系统的复杂性。

  • 设计难度:需要正确识别抽象部分和实现部分,设计难度较高。

🚩桥接设计模式的Java实现

代码地址:GitHub

  • 首先创建实现部分接口Color,定义方法 OperationImp()
java 复制代码
/**
 * @author hanson.huang
 * @version V1.0
 * @InterfaceName Color
 * @Description 实现部分接口 Color
 * @date 2025/3/24 10:46
 **/
public interface Color {

    public void OperationImp(String name);
}
  • 创建 抽象产品类Product,定义抽象方法 Operation(),并维护一个对 接口Color 的引用。
java 复制代码
/**
 * @author hanson.huang
 * @version V1.0
 * @ClassName Product
 * @Description 产品抽象类
 * @date 2025/3/24 10:40
 **/
public abstract class Product {

    private String name;

    protected Color color;

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setColor(Color color) {
        this.color = color;
    }

    public abstract void Operation();
}
  • 创建 扩展抽象部分 ProductA,实现 Operation() 方法,调用 实现部分 的方法。
java 复制代码
/**
 * @author hanson.huang
 * @version V1.0
 * @ClassName ProductA
 * @Description 扩展抽象部分 ProductA
 * @date 2025/3/24 10:48
 **/
public class ProductA extends Product {

    @Override
    public void Operation() {
        color.OperationImp(this.getName());
    }
}
  • 创建 具体实现部分 Red 和 Blue,分别实现 OperationImp() 方法。

    • Red
    java 复制代码
    /**
     * @author hanson.huang
     * @version V1.0
     * @ClassName Red
     * @Description 具体实现部分 Red
     * @date 2025/3/24 10:49
     **/
    public class Red implements Color {
    
        @Override
        public void OperationImp(String name) {
            System.out.println(name + ":红色");
        }
    }
    • Blue
    java 复制代码
    /**
     * @author hanson.huang
     * @version V1.0
     * @ClassName Blue
     * @Description 具体实现部分 Blue
     * @date 2025/3/24 10:49
     **/
    public class Blue implements Color {
    
        @Override
        public void OperationImp(String name) {
            System.out.println(name + ":蓝色");
        }
    }
  • 测试桥接模式

java 复制代码
/**
 * @author hanson.huang
 * @version V1.0
 * @ClassName BridgePattern
 * @Description 测试桥接模式
 * @date 2025/3/24 10:59
 **/
public class BridgePattern {
    public static void main(String[] args) {
        Product productA1 = new ProductA();
        Product productA2 = new ProductA();
        Red red = new Red();

        productA1.setName("产品A1");
        productA1.setColor(red);
        productA1.Operation();

        Blue blue = new Blue();
        productA2.setName("产品A2");
        productA2.setColor(blue);
        productA2.Operation();
    }
}

📌 运行结果

🚩代码总结

  • 抽象部分 Product 定义抽象方法 Operation(),并维护一个对 实现部分 Color 的引用。

  • 扩展抽象部分ProductA实现 Operation() 方法,调用 实现部分 的方法。

  • 实现部分接口Color定义方法 OperationImp()

  • 具体实现部分 RedBlue 分别实现 OperationImp() 方法。

🚩总结

  • 桥接模式(Bridge Pattern)抽象部分实现部分 分离,使它们可以 独立变化

  • 适用于 避免抽象与实现之间的永久绑定独立扩展抽象与实现在运行时切换实现 的场景。

  • Java 实现 需要 定义抽象部分实现部分接口 以及 具体实现部分,并通过组合关系将两者连接起来。

✅ 适用场景:

  • 需要 避免抽象与实现之间的永久绑定 时。

  • 需要 独立扩展抽象与实现 时。

  • 需要 在运行时切换实现 时。

创作不易,不妨点赞、收藏、关注支持一下,各位的支持就是我创作的最大动力❤️

相关推荐
kyriewen几秒前
代码写成一锅粥?3个设计模式让你的项目“起死回生”
前端·javascript·设计模式
wbs_scy34 分钟前
Linux线程同步与互斥(三):线程同步深度解析之POSIX 信号量与环形队列生产者消费者模型,从原理到源码彻底吃透
java·开发语言
jinanwuhuaguo2 小时前
(第三十三篇)五月的文明奠基:OpenClaw 2026.5.2版本的文明级解读
android·java·开发语言·人工智能·github·拓扑学·openclaw
xmjd msup3 小时前
spring security 超详细使用教程(接入springboot、前后端分离)
java·spring boot·spring
952363 小时前
SpringBoot统一功能处理
java·spring boot·后端
Lyyaoo.3 小时前
优惠券秒杀业务分析
java·开发语言
消失的旧时光-19433 小时前
统一并发模型:线程、Reactor、协程本质是一件事(从线程到协程 · 第6篇·终章)
java·python·算法
勿忘初心12213 小时前
Java 国密 SM4 加密工具类实战(Hutool + BouncyCastle)|企业级数据加密 + 兼容 JDK8
java·数据安全·数据加密·后端开发·企业级开发·国密 sm4
庞轩px3 小时前
第8篇:原子类与CAS底层原理——无锁并发的实现
java·cas·乐观锁·aba·无锁编程·自旋
rleS IONS3 小时前
SpringBoot中自定义Starter
java·spring boot·后端