桥接模式

桥接模式(Bridge Pattern):

桥接模式是一种结构型设计模式,它将抽象部分和实现部分分离,使它们可以独立变化。桥接模式通过组合而不是继承的方式,实现了抽象和实现的解耦,从而提高了系统的灵活性。

关键角色和概念:

  1. 抽象(Abstraction): 定义抽象部分的接口,并维护一个指向实现部分的引用。
  2. 扩展抽象(Refined Abstraction): 对抽象进行扩展,通常是在抽象的基础上添加一些额外的功能。
  3. 实现(Implementor): 定义实现部分的接口,供具体实现类使用。
  4. 具体实现(Concrete Implementor): 实现实现部分的接口,具体定义实现的细节。

桥接模式的优点:

  1. 解耦抽象和实现: 桥接模式通过将抽象和实现分离,使得它们可以独立变化,减少它们之间的耦合。
  2. 提高系统的可扩展性: 桥接模式使得抽象和实现可以独立地扩展,系统更容易进行功能的扩展和升级。
  3. 隐藏实现细节: 桥接模式通过将实现的细节隐藏在具体实现类中,对客户端透明,提高了系统的安全性。

桥接模式的应用举例:

如你所提到的 JDBC 中的 DriverManager 就是桥接模式的一个典型应用。在 JDBC 中,DriverManager 充当了抽象部分,而不同的数据库驱动充当了实现部分。这样,通过 DriverManager 和具体的数据库驱动的组合,实现了数据库连接的功能,并且可以方便地切换不同的数据库驱动,而不影响整体的结构。

java 复制代码
// 抽象部分
interface DriverManager {
    void getConnection();
}

// 具体实现部分
interface DatabaseDriver {
    void connect();
}

// 扩展抽象
class ConcreteDriverManager implements DriverManager {
    private DatabaseDriver driver;

    public ConcreteDriverManager(DatabaseDriver driver) {
        this.driver = driver;
    }

    @Override
    public void getConnection() {
        System.out.println("Connecting to database...");
        driver.connect();
    }
}

// 具体实现
class MySQLDriver implements DatabaseDriver {
    @Override
    public void connect() {
        System.out.println("Connected to MySQL database.");
    }
}

class OracleDriver implements DatabaseDriver {
    @Override
    public void connect() {
        System.out.println("Connected to Oracle database.");
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        DatabaseDriver mySQLDriver = new MySQLDriver();
        DatabaseDriver oracleDriver = new OracleDriver();

        DriverManager mySQLManager = new ConcreteDriverManager(mySQLDriver);
        DriverManager oracleManager = new ConcreteDriverManager(oracleDriver);

        mySQLManager.getConnection();
        oracleManager.getConnection();
    }
}

这里,DriverManager 是抽象部分,MySQLDriverOracleDriver 是具体实现部分。ConcreteDriverManager 扮演桥梁的角色,通过组合的方式将抽象和实现连接起来。

相关推荐
Victor35614 小时前
https://editor.csdn.net/md/?articleId=139321571&spm=1011.2415.3001.9698
后端
Victor35614 小时前
Hibernate(89)如何在压力测试中使用Hibernate?
后端
灰子学技术15 小时前
go response.Body.close()导致连接异常处理
开发语言·后端·golang
Gogo81616 小时前
BigInt 与 Number 的爱恨情仇,为何大佬都劝你“能用 Number 就别用 BigInt”?
后端
fuquxiaoguang16 小时前
深入浅出:使用MDC构建SpringBoot全链路请求追踪系统
java·spring boot·后端·调用链分析
毕设源码_廖学姐17 小时前
计算机毕业设计springboot招聘系统网站 基于SpringBoot的在线人才对接平台 SpringBoot驱动的智能求职与招聘服务网
spring boot·后端·课程设计
野犬寒鸦19 小时前
从零起步学习并发编程 || 第六章:ReentrantLock与synchronized 的辨析及运用
java·服务器·数据库·后端·学习·算法
逍遥德19 小时前
如何学编程之01.理论篇.如何通过阅读代码来提高自己的编程能力?
前端·后端·程序人生·重构·软件构建·代码规范
MX_935920 小时前
Spring的bean工厂后处理器和Bean后处理器
java·后端·spring
程序员泠零澪回家种桔子21 小时前
Spring AI框架全方位详解
java·人工智能·后端·spring·ai·架构