桥接模式

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

相关推荐
郑州光合科技余经理6 小时前
代驾系统架构拆解:订单链路、权限组织与私有化源码交付
开发语言·后端·算法·架构·系统架构·uni-app·php
hboot8 小时前
AI工程师第六课 - RAG检索增强生成
后端·langchain·llm
mldong9 小时前
jeeflow:98KB 的工作流引擎长什么样
后端
程序员cxuan12 小时前
速度太快了!本地可以跑 DeepSeek-V4-Flash 了
人工智能·后端·程序员
阿祖zu13 小时前
芝士就是力量!开源私有化部署与 GitHub 双向同步的个人知识笔记 App
前端·后端·ios
不才不才不不才13 小时前
Spring 源码系列(16): doDispatch 全流程——一次请求的主干链路
java·后端·spring
IT_陈寒13 小时前
SpringBoot自动配置失效?这个隐藏配置坑了我一整晚
前端·人工智能·后端
搜狐技术产品小编202313 小时前
告别“黑盒”与误判:如何用“多智能体对抗辩论”重构内容安全审核系统
后端·多agent
DantyWei14 小时前
controller注册及调用时机
后端
sugar__salt14 小时前
Spring 三层架构与 IoC、依赖注入完全指南
java·spring boot·后端·spring·架构·maven·intellij-idea