对数据库的操作一般包括连接、打开、使用、关闭等步骤,在数据库操作模板类中我们定义了connDB()、openDB()、useDB()、closeDB()四个方法分别对应这四个步骤。对于不同类型的数据库(如SQL Server和Oracle),其操作步骤都一致,只是连接数据库connDB()方法不同,现使用模板方法模式对其进行设计。

类图:

Java代码:

  1. public abstract class DBOperator {
  2. public abstract void connDB();
  3. public void openDB() {
  4. System.out.println("打开数据库");
  5. }
  6. public void useDB() {
  7. System.out.println("使用数据库");
  8. }
  9. public void closeDB() {
  10. System.out.println("关闭数据库");
  11. }
  12. public void process() {
  13. this.connDB();
  14. this.openDB();
  15. this.useDB();
  16. this.closeDB();
  17. }
  18. }
  19.  
  20. public class OracleDBOperator extends DBOperator{
  21.  
  22. @Override
  23. public void connDB() {
  24. // TODO Auto-generated method stub
  25. System.out.println("连接Oracle数据库");
  26. }
  27.  
  28. }
  29.  
  30. public class SQLServerDBOperator extends DBOperator{
  31.  
  32. @Override
  33. public void connDB() {
  34. // TODO Auto-generated method stub
  35. System.out.println("连接SQLServer数据库");
  36. }
  37.  
  38. }
  39.  
  40. public class Client {
  41.  
  42. public static void main(String[] args) {
  43. // TODO Auto-generated method stub
  44. DBOperator db;
  45. db=new OracleDBOperator();
  46. db.process();
  47. System.out.println("-----------------");
  48. db=new SQLServerDBOperator();
  49. db.process();
  50. }
  51.  
  52. }

C++代码:

  1. #include<iostream>
  2. using namespace std;
  3. class DBOperator {
  4. public:
  5. virtual void connDB()=0;
  6. void openDB() {
  7. cout<<"打开数据库"<<endl;
  8. }
  9. void useDB() {
  10. cout<<"使用数据库"<<endl;
  11. }
  12. void closeDB() {
  13. cout<<"关闭数据库"<<endl;
  14. }
  15. void process() {
  16. this->connDB();
  17. this->openDB();
  18. this->useDB();
  19. this->closeDB();
  20. }
  21. };
  22. class OracleDBOperator: public DBOperator{
  23. public:
  24. void connDB() {
  25. cout<<"连接Oracle数据库"<<endl;
  26. }
  27. };
  28. class SQLServerDBOperator:public DBOperator{
  29. public:
  30. void connDB() {
  31. cout<<"连接SQLServer数据库"<<endl;
  32. }
  33.  
  34. };
  35. int main(){
  36. DBOperator *db;
  37. db=new OracleDBOperator();
  38. db->process();
  39. cout<<"-----------------"<<endl;
  40. db=new SQLServerDBOperator();
  41. db->process();
  42. }

运行结果:

Java/C++实现模板方法模式---数据库操作的更多相关文章

  1. 折腾Java设计模式之模板方法模式

    博客原文地址:折腾Java设计模式之模板方法模式 模板方法模式 Define the skeleton of an algorithm in an operation, deferring some ...

  2. Java通过JDBC 进行MySQL数据库操作

    转自: http://blog.csdn.net/tobetheender/article/details/52772157 Java通过JDBC 进行MySQL数据库操作 原创 2016年10月10 ...

  3. Java设计模式之模板方法模式(Template Method)

    一.含义 定义一个算法中的操作框架,而将一些步骤延迟到子类中.使得子类可以不改变算法的结构即可重定义该算法的某些特定步骤,不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现. 二 ...

  4. java设计模式之模板方法模式

    模板方法模式 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中. 模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤.通俗的说的就是有很多相同的步骤的,在某一些地方可能有一些差 ...

  5. java之Hibernate框架实现数据库操作

    之前我们用一个java类连接MySQL数据库实现了数据库的增删改查操作---------MySQL篇: 但是数据库种类之多,除了MySQL,还有Access.Oracle.DB2等等,而且每种数据库语 ...

  6. Java抽象类应用—模板方法模式

    模板方法模式(Templete method) 定义一个操作中的算法的骨架,而将一些可变部分的实现延迟到子类中,模板方法模式使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定的步骤. 例: ...

  7. Java设计模式应用——模板方法模式

    所谓模板方法模式,就是在一组方法结构一致,只有部分逻辑不一样时,使用抽象类制作一个逻辑模板,具体是实现类仅仅实现特殊逻辑就行了.类似科举制度八股文,文章结构相同,仅仅具体语句有差异,我们只需要按照八股 ...

  8. Java设计模式之模板方法模式(Template)

    前言: 我们在开发中有很多固定的流程,这些流程有很多步凑是固定的,比如JDBC中获取连接,关闭连接这些流程是固定不变的,变动的只有设置参数,解析结果集这些是根据不同的实体对象“来做调整”,针对这种拥有 ...

  9. Java常用工具类之数据库操作辅助类DBUtil.java

    package com.qushida.util; import java.beans.BeanInfo; import java.beans.Introspector; import java.be ...

随机推荐

  1. Go基础知识梳理(一)

    Go基础知识梳理(一) Go中package的用法及作用 package hello 用于分包,Go通过包来管理命名空间 import ( "hello" //通过import关键 ...

  2. VirtualBox虚拟机--安装新系统

    问题概述:在VirtualBox虚拟机中使用ISO镜像文件安装新系统. 继在本机系统上学习Python把系统搞坏掉以后,总结教训试新东西还是先在虚拟机上练手. 找同事拷了一个win10系统的ISO镜像 ...

  3. 简单聊一聊Javascript中的模块化

    在面试中只要说到模块化的问题,多多少少总会问到这些,umd.amd.cjs.esm,可能听过其中一个两个,或者都听说过.接下来我们先简单了解一下他们到底是什么,又有什么样的区别呢. 最开始的时候,Ja ...

  4. think php 7天免登录

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. 路径查找算法应用之A*算法

    环境:Visual Studio 2017 + .Net Framework 4.5 应用场景:在画板上查找起始点和目标点之间的最短最直路径,最后画出连接两个点之间的折线. 算法简介:A*算法是一种性 ...

  6. Github又悄悄升级了,这次的变化是大文件的存储方式

    目录 简介 LFS和它的安装 LFS的使用 从LFS中删除文件 从LFS中拉取代码 转换历史数据到LFS 总结 简介 github是大家常用的代码管理工具,也被戏称为世界上最大的程序员交友网站,它的每 ...

  7. 宏参数(Arguments)的扩展

    宏分为两种,一种是 object-like 宏,比如: #define STR "Hello, World!" 另一种是 function-like 宏,比如: #define M ...

  8. Java基础——ArrayList

    Java基础--ArrayList 作用:提供一个可变长度的集合,底层实际上是一个可变长度的数组 格式:ArrayList <E> arr=new ArrayList<>(); ...

  9. SQL获取当前时间(日期)

    --获取当前日期(如:yyyymmdd)select CONVERT (nvarchar(12),GETDATE(),112) --获取当前日期(如:yyyymmdd hh:MM:ss)select ...

  10. MySQL—分页查询

    分页查询 应用场景:当要显示的数据,当一页显示不全,有很多的数据时,就需要分页提交sql请求 语法:select 查询列表 from表名 [  join type join 表2 on连接条件 whe ...