桥接模式

桥接模式(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 扮演桥梁的角色,通过组合的方式将抽象和实现连接起来。

相关推荐
编程乐学(Arfan开发工程师)3 小时前
56、原生组件注入-原生注解与Spring方式注入
java·前端·后端·spring·tensorflow·bug·lua
Elcker6 小时前
Springboot+idea热更新
spring boot·后端·intellij-idea
南玖yy7 小时前
深入理解 x86 汇编中的符号扩展指令:从 CBW 到 CDQ 的全解析
开发语言·汇编·arm开发·后端·架构·策略模式
江梦寻9 小时前
软件工程教学评价
开发语言·后端·macos·架构·github·软件工程
美好的事情能不能发生在我身上9 小时前
苍穹外卖Day11代码解析以及深入思考
java·spring boot·后端·spring·架构
不良手残9 小时前
Redisson + Lettuce 在 Spring Boot 中的最佳实践方案
java·spring boot·redis·后端
一线大码10 小时前
SpringBoot 和 MySQL 的事务隔离级别关系
spring boot·后端·mysql
罗政11 小时前
基于 SpringBoot + Vue 在线点餐系统(前后端分离)
vue.js·spring boot·后端
曼岛_11 小时前
[架构之美]深入优化Spring Boot WebFlux应用
spring boot·后端·架构