设计模式 桥接模式(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. 设备驱动程序

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

相关推荐
考虑考虑10 小时前
Jpa使用union all
java·spring boot·后端
用户37215742613510 小时前
Java 实现 Excel 与 TXT 文本高效互转
java
浮游本尊11 小时前
Java学习第22天 - 云原生与容器化
java
渣哥13 小时前
原来 Java 里线程安全集合有这么多种
java
间彧13 小时前
Spring Boot集成Spring Security完整指南
java
间彧13 小时前
Spring Secutiy基本原理及工作流程
java
数据智能老司机14 小时前
精通 Python 设计模式——创建型设计模式
python·设计模式·架构
Java水解14 小时前
JAVA经典面试题附答案(持续更新版)
java·后端·面试
数据智能老司机15 小时前
精通 Python 设计模式——SOLID 原则
python·设计模式·架构
洛小豆16 小时前
在Java中,Integer.parseInt和Integer.valueOf有什么区别
java·后端·面试