写点什么

设计模式的艺术 第二十五章模板方法设计模式练习(用模板方法模式开发一个数据库操作模块,用户只需将 SQL 语句作为参数传入模板方法,则可实现连接数据库、打开数据库、操作数据库(查询或更新)、关闭数据库等操作)

作者:代廉洁
  • 2022 年 9 月 04 日
    浙江
  • 本文字数:1842 字

    阅读完需:约 6 分钟

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


发布于: 刚刚阅读数: 2
用户头像

代廉洁

关注

还未添加个人签名 2019.10.15 加入

还未添加个人简介

评论

发布
暂无评论
设计模式的艺术 第二十五章模板方法设计模式练习(用模板方法模式开发一个数据库操作模块,用户只需将SQL语句作为参数传入模板方法,则可实现连接数据库、打开数据库、操作数据库(查询或更新)、关闭数据库等操作)_设计模式的艺术_代廉洁_InfoQ写作社区