设计模式 - 桥接模式

桥接模式:当类中存在两个维度的职责时,根据职责拆分成抽象部分角色和实现部分角色(组合关系),使两部分可以独立变化
核心:职责拆分,组合关系实现弱关联(解耦),面向接口编程提高系统灵活性
场景:

  • 类中存在两个维度,其中一个维度依赖(接口,组合关系)于另一个维度的功能
  • 框架中,Manager部分和依赖接口由框架进行限定,而具体的实现由用户引入对应的依赖接口实现子类(例:JDBC DriverManager和IDriver) --- 抽象构建框架模型

PS:抽象部分角色和实现部分角色:将不变部分作为控制维度(抽象部分),将易变部分作为被依赖维度(实现部分),提高系统灵活性

桥接模式 - 设计模式之禅

JDBC桥接模式示例

抽象部分(DriverManager + IDriver)

// 主枝 - driver职责相关的代码通过依赖的方式引入
public class DriverManager {
    private IDriver driver = null;

    protected DriverManager(IDriver driver){
        this.driver = driver;
    }

    public String getConnection(){
        // 前置逻辑
        String conn = this.driver.getConnection();
        // 后置逻辑
        return conn;
    }

    public boolean execute(String conn, String sql){
        // 前置逻辑
        boolean result = driver.executeUpdate(conn,sql);
        // 后置逻辑
        return result;
    }
}
// 接口,作为Controller的依赖
public interface IDriver {
    String getConnection();

    boolean executeUpdate(String conn, String sql);
}

实现部分(IDriver的实现子类)

// 可由用户选择和实现
public class MysqlDriver implements IDriver{
    @Override
    public String getConnection() {
        return "mysql conn";
    }

    @Override
    public boolean executeUpdate(String conn, String sql) {
        System.out.println(conn + " execute update");
        return true;
    }
}
// 可由用户选择和实现
public class OracleDriver implements IDriver{
    @Override
    public String getConnection() {
        return "mysql conn";
    }

    @Override
    public boolean executeUpdate(String conn, String sql) {
        System.out.println(conn + " execute update");
        return true;
    }
}
posted @ 2020-11-29 22:45  祁奇  阅读(60)  评论(0编辑  收藏  举报