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

2021-08-24 20:45:52 字數 2659 閱讀 3186

工廠方法模式也是乙個很常見、很基礎的設計模式,屬於建立型模式。它遮蔽了建立物件的細節,使用者可以直接使用,而不用去關心具體的實現邏輯。

define an inte***ce for creating an object,but let subclasses decide which class to

instantiate.factory method lets a class defer instantiation to subclasses.

工廠模式(factory pattern)定義乙個建立物件的介面,讓其子類決定例項化哪乙個工廠類,工廠模式使其建立過程延遲到子類,類圖如下:

這裡,我們用了召喚師建立英雄這一模型:

1.我們需要乙個抽象英雄工廠類,其子類實現了建立英雄的邏輯(這裡一般會引入泛型來限制入參和出參的型別)

/**

* 抽象英雄工廠類

*@description:

*@author:wws

*@time:2023年8月21日 下午4:43:45

*/public

abstract

class

abstractherofactory

/**

* 英雄工廠類

*@description:

*@author:wws

*@time:2023年8月21日 下午4:44:37

*/public

class

herofactory

extends

abstractherofactory catch (classnotfoundexception e) catch (instantiationexception e) catch (illegalacces***ception e)

return (t)hero;}}

2.然後定義統一的英雄介面,包含了laugh(嘲諷)、play(遊戲)兩個基本方法,其子類則是具體的英雄,如趙信、燼、莫甘娜等

/**

* 英雄介面

*@description:

*@author:wws

*@time:2023年8月21日 下午4:45:13

*/public

inte***ce

hero

/**

* 趙信

*@description:

*@author:wws

*@time:2023年8月21日 下午5:09:54

*/public

class

herozhaoxin

implements

hero

public

void

play()

}

/**

* 燼*@description:

*@author:wws

*@time:2023年8月21日 下午5:13:38

*/public

class

herojin

implements

hero

public

void

play()

}

3.最後召喚師使用main方法來呼叫createhero()方法

/**

* 召喚師

*@description:

*@author:wws

*@time:2023年8月21日 下午5:08:13

*/public

class

summoner

}

封裝性好、**結構清晰

擴充套件性好,需要新的英雄(產品),只要新增乙個型別就行

解耦,遮蔽產品細節,呼叫者無需關注具體的實現細節

每增加乙個產品,就需要增加其工廠及實現類,當產品很多時,系統複雜度會很大

工廠模式是頻繁產生物件最好的方式,同時也有很多擴充套件方式:

1. 簡單工廠模式

簡單工廠模式就是在工廠模式的基礎上,拿掉了抽象工廠類,將原來工廠類的覆寫方法改為靜態方法,場景一般是應用中只有乙個工廠模型,沒有其他多餘產品類,也被叫做靜態工廠模式

2. 多個工廠模式

當乙個產品類非常複雜時,如,每個英雄有自己的背景故事、技能、定位等,那我們就需要將抽象類的功能分解,不再定義引數,相應的功能則放到每個英雄工廠類中去,即:每個具體的工廠類明確自己的職責,負責建立自己的產品物件。

3. 替代單例模式

工廠模式也可以在記憶體中只建立唯一的物件,來替代單例模式

4. 延時初始化

乙個物件被消費完,不立即釋放,而是儲存狀態等待再次使用。一般工廠類中會對判斷物件是否存在,存在直接返回,不存在則新建並返回使用,然後存入map中快取。優點是,在建立物件比較複雜時,延時載入可以降低物件產生和銷毀帶來的複雜性,如jdbc的連線等。

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

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

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

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

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

設計六大原則 簡單工廠模式 上篇學習了簡單工廠模式,簡單工廠模式的優點就是工廠類封裝具體物件的實現邏輯,會根據外部傳入的選擇條件來判斷返回對應的具體物件,也就是呼叫者無需關心內部實現邏輯,只需傳入所需物件的型別即可,同樣的缺點也很明顯,如果要通過工廠類的獲取所需的具體物件,必須在工廠類中的靜態方法先...