現實生活中,原始社會自給自足(沒有工廠),農耕社會小作坊(簡單工廠,民間酒坊),工業革命流水線(工廠方法,自產自銷),現代產業鏈代工廠(抽象工廠,富士康)。我們的專案**同樣是由簡到繁一步一步迭代而來的,但對於呼叫者來說,卻越來越簡單。
在日常開發中,凡是需要生成複雜物件的地方,都可以嘗試考慮使用工廠模式來代替。
注意:上述複雜物件指的是類的構造函式引數過多等對類的構造有影響的情況,因為類的構造過於複雜,如果直接在其他業務類內使用,則兩者的耦合過重,後續業務更改,就需要在任何引用該類的源**內進行更改,光是查詢所有依賴就很消耗時間了,更別說要乙個乙個修改了。
工廠模式的定義:定義乙個建立產品物件的工廠介面,將產品物件的實際建立工作推遲到具體子工廠類當中。這滿足建立型模式中所要求的「建立與使用相分離」的特點。
按實際業務場景劃分,工廠模式有 3 種不同的實現方式,分別是簡單工廠模式、工廠方法模式和抽象工廠模式。
我們把被建立的物件稱為「產品」,把建立產品的物件稱為「工廠」。如果要建立的產品不多,只要乙個工廠類就可以完成,這種模式叫「簡單工廠模式」。
在簡單工廠模式中建立例項的方法通常為靜態(static)方法,因此簡單工廠模式(****** factory pattern)又叫作靜態工廠方法模式(static factory method pattern)。
簡單來說,簡單工廠模式有乙個具體的工廠類,可以生成多個不同的產品,屬於建立型設計模式。簡單工廠模式不在 gof 23 種設計模式之列。
簡單工廠模式每增加乙個產品就要增加乙個具體產品類和乙個對應的具體工廠類,這增加了系統的複雜度,違背了「開閉原則」。
「工廠方法模式」是對簡單工廠模式的進一步抽象化,其好處是可以使系統在不修改原來**的情況下引進新的產品,即滿足開閉原則。
工廠類包含必要的邏輯判斷,可以決定在什麼時候建立哪乙個產品的例項。客戶端可以免除直接建立產品物件的職責,很方便的建立出相應的產品。工廠和產品的職責區分明確。客戶端無需知道所建立具體產品的類名,只需知道引數即可。
也可以引入配置檔案,在不修改客戶端**的情況下更換和新增新的具體產品類。
簡單工廠模式的工廠類單一,負責所有產品的建立,職責過重,一旦異常,整個系統將受影響。且工廠類**會非常臃腫,違背高聚合原則。對於產品種類相對較少的情況,考慮使用簡單工廠模式。使用簡單工廠模式的客戶端只需要傳入工廠類的引數,不需要關心如何建立物件的邏輯,可以很方便地建立所需產品。使用簡單工廠模式會增加系統中類的個數(引入新的工廠類),增加系統的複雜度和理解難度。
系統擴充套件困難,一旦增加新產品不得不修改工廠邏輯,在產品型別較多時,可能造成邏輯過於複雜 。
簡單工廠模式使用了 static 工廠方法,造成工廠角色無法形成基於繼承的等級結構。
簡單工廠模式的主要角色如下:
簡單工廠(******factory):是簡單工廠模式的核心,負責實現建立所有例項的內部邏輯。工廠類的建立產品類的方法可以被外界直接呼叫,建立所需的產品物件。其結構圖如下圖所示。抽象產品(product):是簡單工廠建立的所有物件的父類,負責描述所有例項共有的公共介面。
具體產品(concreteproduct):是簡單工廠模式的建立目標。
圖 1 簡單工廠模式的結構圖
根據上圖寫出該模式的**如下:
public
class
client
//抽象產品
public
inte***ce
product
//具體產品:producta
static
class
concreteproduct1
implements
product
}//具體產品:productb
static
class
concreteproduct2
implements
product
}final
class
const
static
class
******factory
return null;}}
}
工廠模式 簡單工廠
簡單工廠其實並不是乙個設計模式,反而比較像一種程式設計習慣。我個人的這樣總結簡單工廠 建立乙個類,封裝建立物件的 故事 現在我要開一家披薩店,叫bbk 必敗客 披薩,賣很多種披薩 芝士披薩 榴蓮披薩等等,我有乙個orderpizza string type 方法,根據客戶傳來的type來提供不同的披...
工廠模式 簡單工廠
工廠 處理建立物件的細節。目的 將例項化具體類的 從應用中抽離,或者封裝起來,可以避免干擾應用的其他部分。簡單工廠 簡單工廠其實不是乙個設計模式,反而像一種程式設計習慣。產品實現 desc 產品a public inte ce a class a1 implements a override pub...
簡單工廠模式,工廠模式,抽象工廠模式
三種模式看了一天,記錄下自己的理解 headfirst,比薩店為例 1,簡單工廠模式 乙個具體的工廠類 pizzafactory 乙個抽象的產品類pizza,可以派生出多個具體的產品類 客戶 pizzastore類 工廠類 pizzafactory類關聯產品類pizza,工廠生產出不同型別的pizz...