工廠模式

定義

將創(chuàng)建對象的動作統(tǒng)一管理,根據(jù)不同的需求提供給使用者不同的對象

比如說在數(shù)據(jù)庫的連接中,有多種不同的數(shù)據(jù)產(chǎn)品,java在連接每種產(chǎn)品時的所要求的步驟都是不一樣的, 那么程序員在開發(fā)的時候就需要非常熟悉每種產(chǎn)品的連接步驟. 同時,每種產(chǎn)品的連接步驟有些是相同的, 如果我們將這些產(chǎn)品的連接步驟寫到一個類中去,形成一個工廠類,那么我們在創(chuàng)建連接的時候就可以直接調(diào)用工廠類獲取連接對象就可以了. 程序員從原來的需要記住所有產(chǎn)品的連接步驟,到只需要告訴工廠需要獲取哪個產(chǎn)品的連接對象就可以了

前提條件

要有繼承,實現(xiàn)

優(yōu)缺點

優(yōu)點

極大的方便了使用者

一個調(diào)用者想創(chuàng)建一個對象,只要知道其名稱就可以了

擴展性高,如果想增加一個產(chǎn)品,只要擴展一個操作類就可以

屏蔽產(chǎn)品的具體實現(xiàn),調(diào)用者只關心產(chǎn)品的接口

缺點

工廠會同時持有多個類,隨著條件的增多, 工廠持有的類也會增加,一定程度上增加了系統(tǒng)的復雜度

一旦添加新的產(chǎn)品,就必須要對工廠的代碼進行修改, 當產(chǎn)品較多時, 就有可能造成工廠的復雜度過高,不利于維護

案例演示

獲取數(shù)據(jù)庫的連接對象,每個連接對象都有 發(fā)送指令, 關閉連接的方法

現(xiàn)有三個數(shù)據(jù)庫 mysql oracle sqlserver

mysql的連接步驟: 校驗用戶名密碼 發(fā)送測試信息 創(chuàng)建連接對象

oracle的連接步驟: 校驗用戶名密碼 測試數(shù)據(jù)傳輸?shù)男?創(chuàng)建連接對象

sqlserver的連接步驟:校驗用戶名密碼 發(fā)送測試信息 測試數(shù)據(jù)傳輸效率 創(chuàng)建連接對象

//數(shù)據(jù)庫接口

public interface DB {

//發(fā)送信息方法

public void sendMessage();

//關系數(shù)據(jù)庫連接方法

public void close();

}

//Mysql數(shù)據(jù)庫

public class MySql implements DB{

public MySql(){

System.out.println("mysql連接初始化...");

System.out.println("執(zhí)行mysql的連接規(guī)則");

}

@Override

public void sendMessage() {

System.out.println("mysql發(fā)送數(shù)據(jù)成功");

}

@Override

public void close() {

System.out.println("mysql連接關閉");

}

}

//Oracle數(shù)據(jù)庫

public class Oracle implements DB{

public Oracle(){

System.out.println("oracle連接初始化...");

System.out.println("執(zhí)行oracle的連接規(guī)則");

}

@Override

public void sendMessage() {

System.out.println("oracle發(fā)送數(shù)據(jù)成功");

}

@Override

public void close() {

System.out.println("oracle連接關閉");

}

}

//SqlServer數(shù)據(jù)庫

public class SqlServer implements DB{

public SqlServer(){

System.out.println("sqlserver連接初始化...");

System.out.println("執(zhí)行sqlserver的連接規(guī)則");

}

@Override

public void sendMessage() {

System.out.println("sqlserver發(fā)送數(shù)據(jù)成功");

}

@Override

public void close() {

System.out.println("sqlserver連接關閉");

}

}

//工廠類

public class ConnectFactory {

private String userName;

private String password;

private String dbName;

//初始化工廠類對象的時候,需要獲取用戶名密碼和數(shù)據(jù)庫名稱,以便于校驗和選擇數(shù)據(jù)連接

public ConnectFactory(String userName, String password, String dbName) {

super();

this.userName = userName;

this.password = password;

this.dbName = dbName;

}

public DB getConnection(){

boolean flg = checkMessage(); //校驗用戶名密碼

if(flg){

switch (dbName) {

case "mysql": // 如果是myql的話 執(zhí)行mql的連接步驟

System.out.println("發(fā)送測試信息");

return new MySql();

case "orcale":? // 如果是oracle的話 執(zhí)行orcale的連接步驟

System.out.println("測試數(shù)據(jù)庫練級效率");

return new Oracle();

case "sqlserver": //如果是sqlserver的話 執(zhí)行sqlserver的連接步驟

System.out.println("發(fā)送測試信息");

System.out.println("測試數(shù)據(jù)庫練級效率");

return new SqlServer();

default:

break;

}

}

return null;

}

//校驗用戶名密碼是否正確

public boolean checkMessage(){

System.out.println("用戶名密碼檢測中....");

if("hanchun".equals(userName)&&"123456".equals(password)){

System.out.println("用戶名密碼校驗成功....");

return true;

}else{

System.out.println("用戶名密碼校驗失敗....");

}

return false;

}

}

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 一. Java基礎部分.................................................
    wy_sure閱讀 4,017評論 0 11
  • 工廠模式包含三種模式:簡單工廠模式、工廠方法模式和抽象工廠模式。 簡單工廠模式 定義簡單工廠模式:由一個工廠類根據(jù)...
    RickGe閱讀 400評論 0 0
  • 概述 工廠模式屬于創(chuàng)建型模式,需要生成的對象叫產(chǎn)品,生產(chǎn)對象的地方叫工廠。實現(xiàn)了調(diào)用者和創(chuàng)建者的分離。 工廠模式的...
    叫我小碼哥閱讀 263評論 0 2
  • 本章目錄如下: 一、階段一 二、階段二 三、階段三 四、java中的裝飾者 五、模式問答 六、設計原則總結 我們...
    黑夜0411閱讀 547評論 0 0
  • 崔斯坦對迪倫輕輕耳語,說他沒有騙她,但是她不該來這里。一切還是得照舊。他還是無法和她一起你,而她也不能待在這里。就...
    真水無香_016d閱讀 377評論 0 2

友情鏈接更多精彩內(nèi)容