抽象工厂在Java源码中的应用
通过《抽象工厂模式》一节的学习,我们已经了解了抽象工厂模式。下面简单介绍一下抽象工厂模式在 Java 源码中的应用。本节代码为了凸显设计模式都进行了一定程度的简化。
经常使用 JDBC 的小伙伴应该知道 java.sql.Connection 接口,Connection 接口中有几个抽象方法,源码如下所示。
Driver 起到 Client 的作用,我们只需要把 Driver 注册进 DriverManager,就可以生成需要的 Connection。每次操作数据库只需要使用 Java 提供的这套接口就可以,不需要考虑使用的是什么 SQL 数据库(不考虑特殊SQL语法的情况下)。
这些抽象工厂与抽象产品均由对应的数据库驱动实现,下面以 MySQL 与 Oracle 的驱动进行举例。
(点击查看高清大图)
经常使用 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 图,如下图所示。(点击查看高清大图)
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算