設計模式學習(六) 工廠方法模式

2021-08-26 14:41:50 字數 1761 閱讀 5003

工廠方法模式(factory method)定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法使乙個類的例項化延遲到其子類。

之前在簡單工廠模式中介紹運算工廠時,我們發現每當我們需要增加乙個運算方法時,都需要修改工廠方法,在switch中新增對應的分支,這樣做的最大優點在於工廠類中包含了必要的邏輯判斷,根據客戶端的選擇條件動態例項化相關的類,對於客戶端來說,去除了與具體產品之間的依賴。但缺點在於違背了開放-封閉原則,因此產生了工廠方法模式。

通過類圖可以看出,工廠方法模式實現時,客戶端需要決定例項化哪乙個工廠來實現運算類,選擇判斷的問題還是存在,工廠方法把簡單工廠的內部判斷邏輯移到了客戶端**來進行,那這麼做的含義是什麼?

比如在計算器的簡單工廠方法中,我們在客戶端需要計算三對資料的乘積,同時需要分別儲存乘數與被乘數時,我們需要這樣寫:

public

static

void

main(string args) throws ioexception

當某天業務邏輯發生改變,該計算需要由乘法改為加法,那我們需要將所有的createoperation("*")變更為createoperation("+"),這是不好的,更多的運算類會導致大量的**修改。通過工廠方法模式改造如下:

運算方法父類

public

class

operation

public

void

setnumbera(double numbera)

public

double

getnumberb()

public

void

setnumberb(double numberb)

public

double

getresult();

}

加法實現類

public

class

operationadd

extends

operation

}//其他運算方法相同,省略...

工廠介面

public

inte***ce

ifactory

加法工廠方法

public

class

operationaddfactory

implements

ifactory

}//其他運算方法工廠相同,省略...

public

static

void

main(string args)

此時,當業務需要我們將乘法變更為加法時,只需要修改一處,將new operationmulfactory()修改為new operationaddfactory()即可。

工廠方法模式克服了簡單工廠違背開放-封閉原則的缺點,又保持了封裝物件建立過程的優點,降低了客戶程式與產品物件的耦合,是簡單工廠模式的進一步抽象和推廣,但缺點是每加乙個產品,就需要加乙個產品工廠的類,增加了額外的開發量。

設計模式筆記(六) 工廠方法模式

工廠方法模式 factorymethod 實現時由客戶端需要決定例項化哪乙個工廠來實現運算類。using system namespace studesignmode.factorymethod public double numb public virtual double getresult 加...

設計模式學習 工廠方法模式

工廠方法模式,定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類,工廠方法使乙個類的例項化延遲到了其子類。之前的簡單工廠模式雖說也非常好,但是在新增和更改生產選項的時候,不得不更改switch和case語句,這點違背了設計模式的開方 封閉的原則。工廠方法模式,既克服了簡單工廠違背開方 封閉原則的缺...

學習設計模式 工廠方法模式

說明 工廠方法跟簡單工廠的區別在於簡單工廠方法在構造的時候,通過判斷輸入引數,例項化不同車物件,而工廠方法新增不同車的工廠,客戶端在呼叫的時候控制例項化哪個車工廠。需求 跟簡單工廠模式一樣,要開不同的車 解決方式 a.乙個開車父類,定義乙個開車方法 b.分別定義子類開奧迪車 開賓士車 開寶馬車 繼承...