当前位置: 首页 > news >正文

设计模式之工厂方法(r4笔记第89天)

设计模式中,工厂方法模式的使用还是很频繁的,但是似乎在工作中没有留意或者重视。在各大网站中对于工厂方法模式的例子一般都是举女娲造人的例子,我就不做重复工作了,我觉得通过模拟oracle或者mysql的jdbc连接也是一个很生动的例子,我们完全可以通过工厂方法来模拟这种,对于不同的需求可以灵活的处理。为此我画了如下的UML图。我们定义一个借口GeneralJDBC,其中有各种jdbc中涉及到的方法,但是对于这些方法,可能在Oracle,MySQL中会有一些不同之处,或者在使用中的细节差别。我们定义了两个实现类OracleJDBC和MySQLJDBC在此基础上,我们在需要调用的时候,可以根据对应的GeneralJDBC实现类来初始化连接。初始化的部分在DBConnInit中,这个类是一个抽象类,在DBConnFactory就是工厂方法的实现了。里面会根据对应的GeneralJDBC来做实际的实例化工作。这些工作做完以后就可以通过客户端来调用了。0实现的代码如下:

  1. import java.sql.Connection;

  2. import java.sql.ResultSet;

  3. import java.sql.SQLException;

  4. import java.sql.Statement;

  5. public interface GeneralJDBC {

  6. public Connection initConnection() throws SQLException;

  7. public Statement createStatment(Connection conn) throws SQLException;

  8. public ResultSet executeQuery(Statement stmt,String SQL) throws SQLException;

  9. public void getRsResults(ResultSet rs) throws SQLException;

  10. }

import java.sql.Connection;

  1. import java.sql.DriverManager;

  1. import java.sql.Connection;

  2. import java.sql.ResultSet;

  3. import java.sql.Statement;

  4. public class MySQLJDBC implements GeneralJDBC{

  5. @Override

  6. public Connection initConnection() {

  7. return null;

  8. }

  9. @Override

  10. public Statement createStatment(Connection conn) {

  11. return null;

  12. }

  13. @Override

  14. public ResultSet executeQuery(Statement stmt, String SQL) {

  15. return null;

  16. }

  17. @Override

  18. public void getRsResults(ResultSet rs) {

  19. // TODO Auto-generated method stub

  20. }

  21. }

  1. public abstract class DBConnInit {

  2. public abstract <T extends GeneralJDBC> T initDBDriverClass(Class<T> dbDriverClass);

  3. }

  1. public class DBConnFactory extends DBConnInit {

  2. @Override

  3. public GeneralJDBC initDBDriverClass(Class<GeneralJDBC> dbDriverClass) {

  4. GeneralJDBC dbDriver = null;

  5. try {

  6. dbDriver = (GeneralJDBC) Class.forName(dbDriverClass.getName()).newInstance();

  7. } catch (InstantiationException e) {

  8. e.printStackTrace();

  9. } catch (IllegalAccessException e) {

  10. e.printStackTrace();

  11. } catch (ClassNotFoundException e) {

  12. e.printStackTrace();

  13. }

  14. return dbDriver;

  15. }

  16. }

  1. import java.sql.Connection;

调用客户端程序的结果如下:

TABLE_NAME TABLE_TYPE LOGMNR_SESSION_EVOLVE$ TABLE LOGMNR_EVOLVE_SEQ$ SEQUENCE LOGMNR_SEQ$ SEQUENCE LOGMNR_DIDS$ SEQUENCE LOGMNR_UIDS$ SEQUENCE。。。

相关文章:

  • database replay基础学习(r4笔记第90天)
  • 结合EM快速解决复杂的配置问题(r4笔记第91天)
  • 世界级Oracle专家Jonathan Lewis:我很为DBA们的未来担(r4笔记第92天)
  • 基于dba_hist_sqlstat查看sql语句的性能历史(r4笔记第92天)
  • 美国版的愚公-24年造山(r4笔记第93天)
  • awk中的变量(r4笔记第93天)
  • 清理session的小插曲(r4笔记第95天)
  • 关于权限管理的实用脚本(r4笔记第94天)
  • 关于date格式的两个案例(r4笔记第96天)
  • 实用的位运算应用(r4笔记第97天)
  • 广东千年古寺微信招聘收到全球超4000份简历(r4笔记第98天)
  • 曲折的10g,11g中EM的安装配置过程(r4笔记第98天)
  • 至离开北京的朋友们(r4笔记第99天)
  • 第5轮学习笔记规划(r4笔记第100天)
  • 使用impdp不当导致的数据丢失问题(r5笔记第1天)
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • 08.Android之View事件问题
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • Brief introduction of how to 'Call, Apply and Bind'
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • cookie和session
  • JAVA_NIO系列——Channel和Buffer详解
  • php的插入排序,通过双层for循环
  • Protobuf3语言指南
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • Python_网络编程
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 和 || 运算
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 算法---两个栈实现一个队列
  • 跳前端坑前,先看看这个!!
  • 小程序开发中的那些坑
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • 阿里云移动端播放器高级功能介绍
  • 如何正确理解,内页权重高于首页?
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • #、%和$符号在OGNL表达式中经常出现
  • (003)SlickEdit Unity的补全
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (笔试题)合法字符串
  • (二)JAVA使用POI操作excel
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .gitignore
  • .Net 6.0 处理跨域的方式
  • .NET MVC之AOP
  • .NET4.0并行计算技术基础(1)