S06 桥接模式 JDBC源码解析

JDBC中对桥接模式的使用

java.sql.Driver
  • 作为继承结构1的抽象层;
public interface Driver {
    Connection connect(String url, java.util.Properties info)
        throws SQLException;
    // ...    
com.mysql.jdbc.Driver
  • 作为继承结构1的实现层;
public class Driver extends NonRegisteringDriver implements java.sql.Driver {
    //
    // Register ourselves with the DriverManager
    //
    static {
        try {
            java.sql.DriverManager.registerDriver(new Driver());
        } catch (SQLException E) {
            throw new RuntimeException("Can't register driver!");
        }
    }

    /**
     * Construct a new driver and register it with DriverManager
     * 
     * @throws SQLException
     *             if a database error occurs.
     */
    public Driver() throws SQLException {
        // Required for Class.forName().newInstance()
    }
}
java.sql.DriverManager
  • 作为桥的另一头,但其本身并不代表继承结构2的抽象层;
  • 其组合了DriverInfo,DriverInfo是对Driver的封装,可以看成是Driver,算是把Driver的整个继承结构给桥接过来了;
  • 但是DriverManager本身并不是继承结构2的抽象,那谁是呢? Connection;java.sql.Connection是作为继承结构2的抽象的;
  • DriverManager通过registerDriver(...)将具体的Driver注册进来,然后具体的Driver创建出具体的Connection;
  • DriverManager通过组合的方式将自己变成桥梁,桥接了Driver和Connection两个继承结构;
public class DriverManager {

    // List of registered JDBC drivers
    private final static CopyOnWriteArrayList<DriverInfo> registeredDrivers = new CopyOnWriteArrayList<>();
    // ...
}

特别注解:我觉得其实这不能算严格意义上的桥接模式,桥的一边其实是工厂方法模式(Driver-Connection, FabricMySQLDriver-FabricMySQLConnectionProxy),DriverManager桥接了一个工厂方法,但桥的这边并没有继承结构,和那边的继承结构够有排列组合的那么一个意思

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值