首页 > 编程笔记 > Java笔记

抽象工厂在Java源码中的应用

通过《抽象工厂模式》一节的学习,我们已经了解了抽象工厂模式。下面简单介绍一下抽象工厂模式在 Java 源码中的应用。本节代码为了凸显设计模式都进行了一定程度的简化。

经常使用 JDBC 的小伙伴应该知道 java.sql.Connection 接口,Connection 接口中有几个抽象方法,源码如下所示。
public interface Connection {
    //提供一个执行对象
    Statement createStatement() throws SQLException;
    //提供一个支持预编译的执行对象
    PreparedStatement prepareStatement(String sql) throws SQLException;
    //提供一个支持存储过程的执行对象
    CallableStatement prepareCall(String sql) throws SQLException;
}

public class Driver extends NonRegisteringDriver implements java.sql.Driver {
    //注册DriverManager
    static {
        try {
            java.sql.DriverManager.registerDriver(new Driver());
        } catch (SQLException E) {
            throw new RuntimeException("Can't register driver!");
        }
    }
}

public class DriverManager {
    // 注册的JDBC驱动程序列表
    private final static CopyOnWriteArrayList<DriverInfo> registeredDrivers = new CopyOnWriteArrayList<>();
    .... //省略代码
}
由以上可以看出来,Connection 是一个经典的抽象工厂,而 Statement、PreparedStatement、CallableStatement 是 Connection 这个抽象工厂中提供的三个抽象产品。

Driver 起到 Client 的作用,我们只需要把 Driver 注册进 DriverManager,就可以生成需要的 Connection。每次操作数据库只需要使用 Java 提供的这套接口就可以,不需要考虑使用的是什么 SQL 数据库(不考虑特殊SQL语法的情况下)。

这些抽象工厂与抽象产品均由对应的数据库驱动实现,下面以 MySQL 与 Oracle 的驱动进行举例。

1. Connection

Connection 接口的部分实现如下图所示:

2. Statement

Statement 的部分实现如下图所示:

3. PreparedStatement

PreparedStatement 的部分实现如下图所示:

4. CallableStatement

CallableStatement 的部分实现如下图所示:

5. JDBC抽象工厂UML图

下面将以上继承关系简化成一个完整的抽象工厂 UML 图,如下图所示。

点击查看高清大图

所有教程

优秀文章