“Head First 設計模式“ :工廠模式

工廠模式

工廠模式是創建型模式模式,解決new對象時的一些列問題,如:依賴,耦合,後期維護等


1. 簡單工廠模式

如:有一個披薩店類,製作披薩流程如下的,,,代碼裏直接new出了披薩,然後做些操作,如下:

image.png

我們把new這段代碼封裝起來,移動到單獨的一個類裏(SimplePizzaFactory),我們新增的類就是工廠,如下;

image.png

最終的代碼如下;

image.png

總結

新增的SimplePizzaFactory就是簡單工廠模式(一般沒有子類,沒有再繼承關係),我們看看定義,如下:

image.png


2. 工廠方法模式

定義:定義一個用於創建對象的接口,讓子類決定實例化哪一個類,工廠方法使一個類的實例化延遲到其子類。

問題:披薩店的列子中,如果有兩個分店,一個在美國,一個在英語,,那他們需要生產本地化的披薩,這時要引入工廠方法模式了,類圖如下:

image.png

說明:pizzaStore超類(工廠類),有兩個子類,分別兩個子類來決定到底實例化那些產品。


3. 抽象工廠模式


定義抽象工廠模式提供一個接口,用於創建相關或依賴對象的家族,而不需要明確指定具體類。可以理解成是多個工廠方法的組合。

解決問題:在工廠方法模式中,我們的具體創建者每次使用都只能創建一個同類型的對象,假如我們現在需要的是多個不同類型的對象,工廠方法就滿足不了需求了。這時我們可以把多個工廠方法組合到一個類,這就是抽象工廠模式,它就是專門用來創建多個產品,也可以說是創建產品家族的。類圖如下:

image.png

需求:爲了保證質量,我們需要把原料統一共同時,就適合抽象工廠來解決。類圖如下:

image.png


抽象工廠模式的優點

  (1)、允許客戶使用抽象的接口創建一組相關產品,而不需要知道(或者關心)產出的具體產品是什麼,這樣客戶就可以從具體的產品中解耦出來。

  (2)、一個具體工廠可以創建多個產品,與工廠方法模式相比,可以少產生具體工廠的類數量。

  (3)、易於交換產品系列,只要更換具體工廠,就可以改變這個產品系列。


抽象工廠模式的和缺點

  (1)、抽象工廠是使用組合的方式把工廠方法集合到一個類中,當新增一個產品家族成員時就要修改抽象工廠類及其下面的具體工廠類,所以它的擴展性比較差。

  (2)、每新增一個產品子類都要創建一個類,當產品子類過多時會產生很多類,導致系統複雜性加大。


抽象工廠模式的使用場合

  1、當需要創建產品家族,或者需要想讓創建的產品集合起來時使用。

  2、當系列產品不固定,在以後可能會增加整個系列產品時使用。


設計原則

    1. 對擴展開放,對修改關閉。

    2. 依賴抽象,不要依賴具體類。

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