桥接模式:当类中存在两个维度的职责时,根据职责拆分成抽象部分角色和实现部分角色(组合关系),使两部分可以独立变化
核心:职责拆分,组合关系实现弱关联(解耦),面向接口编程提高系统灵活性
场景:
- 类中存在两个维度,其中一个维度依赖(接口,组合关系)于另一个维度的功能
- 框架中,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;
}
}