设计模式 桥接模式(Bridge Pattern)

文章目录

桥接模式简绍

桥接模式(Bridge Pattern)是对象结构型设计模式中的一种,它将抽象与实现分离,使得两者可以独立地变化。这种模式的主要目的是解耦一个类的接口与其实现部分,从而可以更加灵活地给一个对象配置不同的功能实现。

桥接模式的核心概念包括以下几个部分:

  • 抽象 (Abstraction) - 定义一个顶层接口或抽象类,这个抽象层持有一个指向具体实现部分的引用。
  • 精炼抽象 (Refined Abstraction) - 扩展抽象中的行为,并且提供实现的方法。通常精炼抽象会根据实际需求细化抽象提供的基本操作。
  • 实现者接口 (Implementor) - 这是一个接口或抽象类,定义实现部分的接口标准。
  • 具体实现者 (Concrete Implementors) - 实现上述的实现者接口,并包含具体的实现细节。

通过这种方式,桥接模式允许在程序运行时改变对象的表现形式或行为,而无需修改代码。这提高了系统的可扩展性,因为你可以独立地增加新的实现类或抽象类。

桥接模式的工作流程

  • 客户端代码创建一个具体的Refined Abstraction实例。 在创建时,将一个具体的Implementor实例传递给Refined
  • Abstraction。 当调用Refined Abstraction的方法时,它将请求转发给它的Implementor对象。
  • Implementor执行具体的实现,并返回结果给Refined Abstraction。 Refined
  • Abstraction可能进一步处理结果,并最终将其返回给客户端。

桥接模式优缺点

桥接模式优点
  • 分离接口与实现:桥接模式使得抽象和实现可以独立变化。
  • 提高灵活性:可以在不改变客户端代码的前提下添加新的实现或抽象。
  • 支持多维度扩展:可以同时沿多个维度扩展系统。
桥接模式缺点
  • 当一个对象的实现应该独立于其产品接口及其实现细节时。
  • 当你想减少抽象和实现相互依赖的程度时。
  • 当你想通过组合对象来达到比继承更好的复用性时。

UML图

代码示例

使用 充电宝作为示例,实现 充电宝形状以及支持的协议

创建一个 充电宝接口, 基础接口层

java 复制代码
public interface Powerbank {
    public void applyPowerBank();
}

实现是小的, 实现接口

java 复制代码
public class LittlePower implements Powerbank{
    @Override
    public void applyPowerBank() {
        System.out.println("充电宝小的");
    }
}

实现是方的,实现接口

java 复制代码
public class SidePower implements Powerbank{
    @Override
    public void applyPowerBank() {
        System.out.println("充电宝方的");
    }
}

创建 支持的 接口 抽象实现 原有的 形状实现,定义一个抽象接口位于顶层

java 复制代码
public abstract class Connector {
    Powerbank powerbank;

    public Connector(Powerbank powerbank){
        this.powerbank = powerbank;
    }

    public abstract void applyConnector();

}

支持 typec,抽象接口具体实现,并调用原有实现的接口信息

java 复制代码
public class Typec extends Connector{

    public Typec(Powerbank powerbank) {
        super(powerbank);
    }

    @Override
    public void applyConnector() {
        powerbank.applyPowerBank();
        System.out.println("支持typec");
    }
}

支持 usb 抽象接口具体实现,并调用原有实现的接口信息

java 复制代码
public class Usb extends Connector{


    public Usb(Powerbank powerbank) {
        super(powerbank);
    }

    @Override
    public void applyConnector() {
        powerbank.applyPowerBank();
        System.out.println("支持usb");
    }
}

具体调用实现, 测试调用逻辑

java 复制代码
public class Main {
    public static void main(String[] args) {
        Typec typec = new Typec(new LittlePower());
        typec.applyConnector();
        Usb usb = new Usb(new SidePower());
        usb.applyConnector();
    }
}
适用场景
  1. 分离接口与实现

    桥接模式的主要目的是将一个类的接口与其实现分离。这使得你可以独立地扩展类的抽象部分和实现部分

  2. 动态选择实现

    桥接模式允许在运行时动态选择不同的实现。这对于需要在运行时切换实现的场景非常有用。

  3. 系统升级和维护

    桥接模式使得系统更加易于升级和维护,因为你可以单独修改实现而不影响其他部分的代码。例如,当需要添加新的绘制算法时,只需添加新的实现类而无需修改现有代码。

  4. 多层次抽象

    桥接模式支持多层次的抽象,这意味着你可以通过组合不同级别的抽象和实现来创建复杂的行为。例如,你可以组合不同的图形和不同的颜色实现。

  5. 系统集成

    在大型系统集成中,桥接模式可以帮助将不同的子系统或模块连接起来,同时保持高度的灵活性和可扩展性。

  6. 用户界面设计

    在用户界面设计中,桥接模式可以用来分离控件的外观和行为。例如,一个按钮控件可以有不同的皮肤(实现),但其基本功能(抽象)保持不变。

  7. 设备驱动程序

    在编写设备驱动程序时,桥接模式可以用来隔离硬件特定的实现细节,使得驱动程序更易于维护和扩展。

相关推荐
腻害兔8 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
码智社9 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
萧瑟余晖9 小时前
JDK 26 新特性详解
java·开发语言
马优晨10 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
维天说13 小时前
CLI-Switch 2026年3月版历史设计:Hook、TTY 隔离与 JSON 状态
java·服务器·json
Zane199413 小时前
并发 vs 并行:别再傻傻分不清了,一文讲透 Java 并发编程的第一课
java·后端
杨充14 小时前
11.DDD与战术建模
设计模式·开源·代码规范
杨充14 小时前
12.综合实战图片框架
设计模式·开源·代码规范
噢,我明白了14 小时前
java中Excel的导入和导出(EasyExcel)
java·开发语言·excel
吠品14 小时前
Zabbix Web界面误报Server未运行的排查与解决
java·服务器·数据库