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关闭数据库
复制代码
评论