設計模式系列之二 工廠方法模式

2021-07-10 19:01:46 字數 2473 閱讀 1194

前言

前一篇博文中介紹了簡單工廠模式,這裡再介紹一下工廠方法模式。與簡單工廠很像,那麼兩者的區別是什麼呢?在這篇博文中,首先會簡單介紹一下工廠方法的使用方法,並對工廠方法模式進行簡單的小結。最後,將結合具體的例子對比簡單工廠模式與工廠方法模式,並對兩者的使用場景做乙個小小的歸納。

背景: 某公司開發了乙個a軟體,資料庫使用的是sqlserver。後由於客戶要求需要使用oracle資料庫,原來的資料要遷移到oracle中,在遷移的過程中遇到很多問題,比如語法錯誤,關鍵字濫用,函式不支援等問題。請設計一組程式,實現資料的無縫遷移

問題背景與工廠方法一樣,主要是為了便於對兩者進行比較。ok,為了對工廠方法有乙個更好的理解,請看下面的結構圖:

於是,我們根據上面的結構圖可以寫出如下的**:

//user物件

public

class

user

//資料庫物件父類

public

abstract

class

dbobject

//具體的oracle物件

public

class

oracleobject

extends

dbobject

@override

public user finduserbyid(int id)

}//具體的sqlserver物件

public

class

sqlserverobejct

extends

dbobject

@override

public user finduserbyid(int id)

}//工廠的抽象介面

public

inte***ce

idbobjectfactory

//oracle資料庫物件的工廠,作用是建立oracle物件

public

class

oracleobjectfactory

implements

idbobjectfactory

}//sqlserver資料庫物件的工廠類,作用是建立sqlserver的物件

public

class

sqlserverobjectfactory

implements

idbobjectfactory

}//測試方法

public

static

void

main(string args)

測試結果:

使用oracle新增使用者

使用oracle通過id找到使用者

ok,通過上面的程式,我們來回顧一下工廠方法的定義:

工廠方法定義乙個用於建立物件的介面,讓子類去決定例項化哪個物件。建立物件延遲到子類中

dbobject db1 = dbfactory.createdbobject("oracle");

dbobject db2 = dbfactory.createdbobject("oracle");

dbobject db3 = dbfactory.createdbobject("oracle");

//呼叫查詢以及新增的方法,這裡省略

好,這樣寫並沒有什麼問題,假如這三個使用者覺得oracle不好用,要改用sqlserver物件,怎麼辦?簡單,直接把上面的**中的oracle改為sqlserver不久行了嘛,所以修改之後的**這樣的:

dbobject db1 = dbfactory.createdbobject("sqlserver");

dbobject db2 = dbfactory.createdbobject("sqlserver");

dbobject db3 = dbfactory.createdbobject("sqlserver");

**改好了,很簡單,有木有,確實。但是加入不是三個使用者而是一億個使用者呢?難道要改一億次,明顯不太現實(可能有人說,一億算個啥,用ctrl+h直接一替換不久完事了嗎。我們在討論設計模式,不帶這麼玩的哈,這不科學!)

而我們使用工廠方法模式只需要修改上面測試方法中的工廠物件就可以

//測試方法

public

static

void

main(string args)

通過這個例子,可以發現簡單工廠模式違背了對外擴充套件開放,對內修改關閉的原則,因為當需要增加mysql物件的時候,需要在工廠方法模式中新增switch的語句分支的判斷,而在工廠方法模式中,只需要建立乙個mysql物件工廠類(需要實現idbobjectfactory介面)就可以了,**比較簡單就不附上**了。

工廠模式之二 工廠方法模式

工廠方法模式 乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法使乙個類的例項化延遲到其子類。工廠方法克服了簡單工廠違反開發 封閉原則的缺點,既保持了封裝物件建立過程的優點。工廠方法模式實現時,客戶端需要決定例項化哪乙個工廠來實現運算類,選擇判斷的問題還是存在的,也就是說工廠方法把簡單工廠的...

java設計模式之二 工廠方法模式

在簡單工廠模式中,建立類的工作都交給了工廠類來處理。這樣一來,假如專案非常龐大,工廠類就難以維護。那麼,可以通過將工廠抽象出來,形成乙個介面,具體的工廠類實現抽象類的介面。這樣一來,核心的工廠類可以不必負責產品的建立,僅負責定義具體工廠類必須實現的介面,形成乙個規範。這樣的好處是,可以使系統在不修改...

設計模式系列(二)簡單工廠模式與工廠方法模式

參考 工廠模式分為三種 一 簡單工廠模式 factory pattern 包括三個角色 factory 工廠角色 product 抽象產品角色 concreteproduct 具體產品角色 具體產品角色實現抽象產品橘色,工廠類則負責produce 示例 main public class test ...