設計模式之不簡單的工廠模式(一)

談起設計模式中兩個最簡單的設計模式第一個大家想到的應該就是單例模式,第二個想必就是工廠模式了,拿我自身而言之前一直以來對工廠方法認識較淺,只覺得所謂的工廠模式就是將創建對象的過程封裝到一個工廠類裏面,需要調用的時候傳入參數然後返回指定的對象,好的,下面步入正題;

說起工廠模式,要明確一個作用,就是用來創建對象的,將創建對象的方式從最基本的new語句解放出來,一般來說有三塊知識點:

1、簡單工廠

2、工廠方法模式

3、抽象工廠模式

本篇文章就先介紹簡單工廠,關於簡單工廠,很多人把它也稱爲設計模式,其實它並不是一種設計模式,或者說稱爲一種編程習慣更好一些,採用它的好處就是你在調用的時候不需要去關心對象是如何實現的,對於客戶而言,只需要做到傳遞參數,然後獲取對象;舉個JDBC的例子,由於不同的數據庫提供商對java.sql.Driver提供了不同的實現,導致了實現類和URL各不相同,那麼我們在獲取數據庫連接的時候,就會使用如下不同的代碼:


試想一下,如果一個Java項目在在一個應用中需要頻繁的跟不同的數據庫打交道,也就是說需要根據不同狀況獲取不同的JDBC的Connection對象,如下所示:

	public void doSaveUserInfo(UserInfo userInfo){
		
		Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
		String url="jdbc:oracle:thin:@localhost:1521:orcl"//orcl爲數據庫的SID(實例名)
		String user="system";//用戶名
		String pwd="admin";//密碼
		Connection conn=DriverManager.getConnection(url,user,pwd);
		
		// 保存用戶信息
		....
	}
	
	public void doSaveUserInfo(UserInfo userInfo){
		Class.forName("com.mysql.jdbc.Driver").newInstance();
		String url="dbc:mysql://localhost:3306/mydb";//dbName爲數據庫名
		String user="system";//用戶名
		String pwd="admin";//密碼
		java.sql.Connection conn=DriverManager.getConnection(url,user,pwd);
		
		// 保存用戶信息
		....
	}
上述贅餘連接數據庫的代碼肯定會大量出現,既然這樣爲何不將創建數據庫連接的具體信息封裝到一個對象裏面去,用戶調用的時候不用關心Connection對象如何創建,只需要傳遞一個信號告訴這個對象,我需要XXX數據庫,你給我建立連接,就可以了,簡單實例如下所示:

package com.utils;

import java.sql.Connection;
import java.sql.DriverManager;

public class DBUtils {
	
	public static Connection getConnFor(String dbType) throws Exception{
		
		if("oracle".equals(dbType)){
			Class.forName("oracle.jdbc.driver.OracleDriver");
			String url="jdbc:oracle:thin:@localhost:1521:orcl";
			return DriverManager.getConnection(url, "***", "***");
		}else if("mysql".equals(dbType)){
			Class.forName("com.mysql.jdbc.Driver");
			String url="dbc:mysql://localhost:3306/mydb";//dbName爲數據庫名
			return DriverManager.getConnection(url,"***", "***");
		}else if("DB2".equals(dbType)){
			Class.forName("com.ibm.db2.jcc.DB2Driver");
			String url="jdbc:db2://127.0.0.1:50000/dbname";//dbName爲數據庫名
			return DriverManager.getConnection(url,"***", "***");
		}else{
			System.out.println("暫不支持其它數據庫類型");
			return null;
		}
	}
	
}
這樣已來,任何想要使用數據庫連接的地方只需要通過以下方式:

	// 獲取Oracle連接
	Connection oracleConn = DBUtils.getConnFor("oracle");

	// 獲取MySql連接
	Connection mysqlConn = DBUtils.getConnFor("mysql");

	// 獲取DB2連接
	Connection db2Conn = DBUtils.getConnFor("DB2");
像DBUtils這個類,就叫做工廠類,該類封裝了創建具體對象的細節,使得客戶只需要告訴它一個信號,該工廠類根據傳遞過阿里的信號創建對應的對象實例並返回,好了簡單工廠就說這麼多,下篇要開始重點介紹工廠方法模式和抽象工廠模式;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章