前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式之工厂方法(r4笔记第89天)

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

作者头像
jeanron100
发布2018-03-15 16:35:19
6650
发布2018-03-15 16:35:19
举报

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

实现的代码如下:

代码语言:javascript
复制
import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;


public interface GeneralJDBC {

 public Connection initConnection() throws SQLException;

 public Statement createStatment(Connection conn) throws SQLException;

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

 public void getRsResults(ResultSet rs) throws SQLException;

}
import java.sql.Connection;

import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


public class OracleJDBC implements GeneralJDBC {
@Override
public Connection initConnection() throws SQLException { 
return DriverManager.getConnection(
"jdbc:oracle:thin:@127.0.0.1:1521:test01", "system", "oracle");
}


@Override
public Statement createStatment(Connection tmp_Conn) throws SQLException {
return tmp_Conn.createStatement();
}


@Override
public ResultSet executeQuery(Statement tmp_stmt, String SQL)
throws SQLException {
return tmp_stmt.executeQuery(SQL);
}


@Override
public void getRsResults(ResultSet rs) throws SQLException {
int columnCnt;
columnCnt = rs.getMetaData().getColumnCount();
for (int i = 1; i <= columnCnt; i++) {
System.out.print(rs.getMetaData().getColumnLabel(i) + "\t ");
}
System.out.println();


while (rs.next()) {
for (int i = 1; i <= columnCnt; i++) {
System.out.print(rs.getString(i) + "\t ");
}
System.out.println();
}
}


}
import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.Statement;





public class MySQLJDBC implements GeneralJDBC{



    @Override

 public Connection initConnection() {

 

 return null;

 }





    @Override

 public Statement createStatment(Connection conn) {

 return null;

 }

 



    @Override

 public ResultSet executeQuery(Statement stmt, String SQL) {

 return null;

 }





    @Override

 public void getRsResults(ResultSet rs) {

 // TODO Auto-generated method stub

 

 }



}
public abstract class DBConnInit {

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

 

}
public class DBConnFactory extends DBConnInit {

    @Override

 public GeneralJDBC initDBDriverClass(Class<GeneralJDBC> dbDriverClass) {

        GeneralJDBC dbDriver = null;

 try {

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

 } catch (InstantiationException e) {

            e.printStackTrace();

 } catch (IllegalAccessException e) {

            e.printStackTrace();

 } catch (ClassNotFoundException e) {

            e.printStackTrace();

 }

 return dbDriver;

 }



}
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


public class ConnClient {
public static void main(String[] args) throws SQLException {
new ConnClient().test();


}
public void test() throws SQLException{
Connection conn;
Statement stmt;
ResultSet rs;
DBConnInit factory = new DBConnFactory();
GeneralJDBC oracleJDBC = factory.initDBDriverClass(OracleJDBC.class);
conn = oracleJDBC.initConnection();
stmt = oracleJDBC.createStatment(conn);
rs = oracleJDBC.executeQuery(stmt, "select *from cat");
oracleJDBC.getRsResults(rs); 
}
}


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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杨建荣的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档