桥接模式

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

相关推荐
小码哥_常5 小时前
别再被误导!try...catch性能大揭秘
后端
苍何7 小时前
30分钟用 Agent 搓出一家跨境网店,疯了
后端
ssshooter7 小时前
Tauri 2 iOS 开发避坑指南:文件保存、Dialog 和 Documents 目录的那些坑
前端·后端·ios
追逐时光者7 小时前
一个基于 .NET Core + Vue3 构建的开源全栈平台 Admin 系统
后端·.net
程序员飞哥7 小时前
90后大龄程序员失业4个月终于上岸了
后端·面试·程序员
GetcharZp9 小时前
Git 命令行太痛苦?这款 75k Star 的神级工具,让你告别“合并冲突”恐惧症!
后端
Victor35610 小时前
MongoDB(69)如何进行增量备份?
后端
Victor35610 小时前
MongoDB(70)如何使用副本集进行备份?
后端
千寻girling10 小时前
面试官 : “ 说一下 Python 中的常用的 字符串和数组 的 方法有哪些 ? ”
人工智能·后端·python
ywf121511 小时前
Spring Boot接收参数的19种方式
java·spring boot·后端