Sunny 软件公司欲使用模板方法模式开发一个数据库操作模块。用户只需将 SQL 语句作为参数传入模板方法,则可连接数据库、打开数据库、操作数据库(查询或更新)、关闭数据库㩐产操作,在设计时有以下要求:
(1)系统需支持多种数据连接方式,例如 JDBC-ODBC 桥接、厂
商驱动或者数据库连接池等。
(2)每次调用模板方法时,需要从“查询数据库”或“更新数据库”
两个方法中选择一个。(注:可以通过在模板方法中增加一个参数来实现。)
试给出该数据库操作模块的核心实现代码。
一、类结构图
抽象类:设计为名称为 SqlOperator 的抽象类,面向抽象适配目标抽象类编程,持有一个适配目标抽象类的引用,包含具体模板方法 execute(String sql, Boolean isUpdate)、具体方法 connect()、抽象方法 open()、抽象方法 close() 、抽象方法 query(String sql)、抽象方法 update(String sql);
具体子类:设计为抽象类 SqlOperator 的子类,设计为名称为 ConcreteSqlOperator 的具体类,实现抽象类的抽象方法 open()、抽象方法 close() 、抽象方法 query(String sql)、抽象方法 update(String sql);
适配目标抽象类:设计为名称为 SqlConnnector 的抽象类,包含抽象方法 doConnect();
适配器类:设计为适配目标抽象类的子类,设计为名称为 ConnectorAdapter 的具体类,持有适配者类 JdbcOdbcDriver 的引用,并实现适配目标抽象类的抽象方法 doConnect();
适配者类:设计为名称为 JdbcOdbcDriver 的具体类。
二、典型实现代码
SQL 操作抽象类:抽象类
// SQL操作抽象类:抽象类
public abstract class SqlOperator {
protected String sql;
protected SqlConnector sqlConnector;
public void setSqlConnector(SqlConnector sqlConnector) {
this.sqlConnector = sqlConnector;
}
public void execute(String sql, Boolean isUpdate) {
this.sql = sql;
connect();
open();
if (isUpdate) {
update();
} else {
query();
}
close();
}
public void connect() {
this.sqlConnector.doConnect();
}
public abstract void open();
public abstract void close();
public abstract void query();
public abstract void update();
}
复制代码
具体 SQL 操作类:具体子类
// 具体SQL操作类:具体子类
public class ConcreteSqlOperator extends SqlOperator{
@Override
public void open() {
System.out.println("打开数据库");
}
@Override
public void close() {
System.out.println("关闭数据库");
}
@Override
public void query() {
System.out.println("查询数据库:" + this.sql);
}
@Override
public void update() {
System.out.println("更新数据库:" + this.sql);
}
}
复制代码
SQL 连接抽象类:适配目标抽象类
// SQL连接抽象类:适配目标抽象类
public abstract class SqlConnector {
public abstract void doConnect();
}
复制代码
SQL 连接适配器类:具体适配器类
// SQL连接适配器类:具体适配器类
public class ConnectorAdaper extends SqlConnector{
private JdbcOdbcDriver jdbcOdbcDriver;
public ConnectorAdaper() {
this.jdbcOdbcDriver = new JdbcOdbcDriver();
}
@Override
public void doConnect() {
System.out.println("使用 JDBC-ODBC Driver 连接数据库");
}
}
复制代码
具体 JDBC-ODBC 驱动类:适配者类
// 具体JDBC-ODBC驱动类:适配者类
public class JdbcOdbcDriver {
public JdbcOdbcDriver() {
}
}
复制代码
客户端代码:
public class Client {
public static void main(String[] args) {
SqlOperator sqlOperator;
SqlConnector sqlConnector;
sqlOperator = new ConcreteSqlOperator();
sqlConnector = new ConnectorAdaper();
sqlOperator.setSqlConnector(sqlConnector);
sqlOperator.execute("SELECT * FROM tableA", false);
System.out.println();
sqlOperator.execute("UPDATE tableA SET 'status' = 1", true);
}
}
复制代码
编译并运行程序,输出如下结果:
使用 JDBC-ODBC Driver 连接数据库
打开数据库
查询数据库:SELECT * FROM tableA
关闭数据库
使用 JDBC-ODBC Driver 连接数据库
打开数据库
更新数据库:UPDATE tableA SET 'status' = 1
关闭数据库
复制代码
评论