工廠模式主要包括簡單工廠模式、工廠方法模式、抽象工廠模式,主要詳細講解這三類工廠模式。
1. ****** factory pattern(簡單工廠模式):專門定義乙個類來負責建立其他類的例項,被建立的例項通常都具有共同的父類。簡單工廠(****** factory)模式又稱為靜態工廠方法(static factory method)模式,屬於類的建立型模式,通常它根據變數的不同返回不同的類的例項。總之:簡單工廠模式沒有採用介面和抽象類,而是採用了普通的類,子類都有同乙個基類,參與的三個角色描述如下:
1) 工廠(creator)角色:是簡單工廠模式的核心,它負責實現建立所有例項的內部邏輯。工廠類可以被外界直接呼叫,建立所需的產品物件。
2) 抽象產品(product)角色:是簡單工廠模式所建立的所有物件的父類,它負責描述所有例項所共有的公共的介面。
3) 具體產品(concrete product)角色:是簡單工廠模式的建立目標,所有建立的物件都是充當這個角色的某個具體類的例項。
優勢和缺陷:
在簡單工廠模式中,工廠類是整個模式的關鍵所在。它包含必要的判斷邏輯,能夠根據外界給定的資訊,決定究竟應該建立哪個具體類的物件。通過使用工廠類,外界可以從直接建立具體產品物件的尷尬局面中擺脫出來,僅僅需要負責「消費」物件就可以了,而不必管這些物件究竟是如何建立以及如何組織的。這樣就明確區分了各自的職責和權力,有利於整個軟體體系結構的優化。
不過,凡事有利就有弊,簡單工廠模式的缺點也正體現在其工廠類上。由於工廠類集中了所有例項的建立邏輯,很容易違反grasp的高內聚的責任分配原則。將全部建立邏輯都集中到乙個工廠類還有另外乙個缺點,那就是當系統中的具體產品類不斷增多時,可能會出現要求工廠類根據不同條件建立不同例項的需求。這種對條件的判斷和對具體產品類的判斷交錯在一起,很難避免模組功能的蔓延,對系統的擴充套件和維護也非常不利。另外,只用乙個類根據if分支來決定建立哪一型別的物件,一旦需要擴充套件,就要修改類的**增加if分支,破壞了開閉原則(open closed principle, ocp,即乙個軟體實體應當對擴充套件開放,對修改關閉。換句話說,我們在設計乙個模組的時候,應當使這個模組在不被修改的前提下可以被擴充套件)。
2. 工廠方法模式(factory method pattern)定義乙個用於建立物件的介面,讓子類決定將哪乙個類例項化。factory method使乙個類的例項化延遲到其子類。
優勢和缺陷:
在工廠方法模式中,工廠方法用來建立客戶所需要的產品,同時還向客戶隱藏了哪種具體產品類將被例項化這一細節。工廠方法模式的核心是乙個抽象工廠類,各種具體工廠類通過抽象工廠類將工廠方法繼承下來。如此使得客戶可以只關心抽象產品和抽象工廠,完全不用理會返回的是哪一種具體產品,也不用關係它是如何被具體工廠建立的。
(1) 基於工廠角色和產品角色的多型性設計是工廠方法模式的關鍵。它能夠使工廠可以自主確定建立何種產品物件,而如何建立這個物件的細節則完全封裝在具體工廠內部。工廠方法模式之所以又被稱為多型工廠模式,就正是因為所有的具體工廠類都具有同一抽象父類。
(2) 使用工廠方法模式的另乙個優點是在系統中加入新產品時,無需修改抽象工廠和抽象產品提供的介面,無需修改客戶端,也無需修改其他的具體工廠和具體產品,而只要新增乙個具體工廠和具體產品就可以了,這符合開閉原則,從而使得系統的可擴充套件性非常好。優秀的物件導向設計鼓勵使用封裝(encapsulation)和委託(delegation)來構造軟體系統,工廠方法模式正是使用了封裝和委託的典型例子,其中封裝是通過抽象工廠來體現的,而委託則是通過抽象工廠將建立物件的責任完成交給具體工廠來體現。
(3) 使用工廠方法模式的缺點是在新增新產品時,需要編寫新的具體產品類,而且還要提供與之對應的具體工廠類,當兩者都比較簡單時,系統會有相對額外的開銷。
優勢和缺陷:
抽象工廠模式的主要優點是隔離了具體類的生成,使得客戶不需要知道什麼被建立了。這種隔離使得更換乙個具體工廠就變得相對容易。所有的具體工廠都實現了抽象工廠中定義的那些公共介面,因此只需改變具體工廠的例項,就可以在某種程度上改變這個軟體系統的行為。另外,應用抽象工廠模式符合grasp純虛構的模式,可以實現高內聚低耦合的設計目的,因此抽象工廠模式得到了廣泛應用。
總結:
簡單工廠模式主要是工廠類解決例項化邏輯,而工廠方法模式是由子類來例項化。抽象工廠模式是把工廠進行多層抽象,以工廠為引數傳遞給使用者,例項化具體的類。
設計模式 設計模式之工廠模式
工廠方法模式 建立模式 使用場景?作用?形態?場景 大量類似的實體類 要建立的實體類都是同一本質的東西 披薩 有部分類似功能 準備 烘烤 切法 實現方式不一樣 準備的材料不同 烘烤時間不同 切法不同 將繁瑣複雜的建立類的過程聚集在一起,有序清晰 把具體例項化的過程從客戶 中抽離 作用 1 將建立物件...
c 設計模式 之 工廠模式之 工廠模式
1 uml類圖 實現和依賴關係 實現 sportfactory jeepfactory hatchbackfactory 實現 ifactory 介面 sportcar jeepcar hatchbackcar 實現 icar 介面 依賴 ifactory 依賴 icar sportfactory ...
設計模式 工廠模式之簡單工廠模式
定義 由乙個工廠物件 工廠類 來指定建立某乙個產品類的例項。使用場景 客戶端只需傳入指定的引數即可,工廠類負責建立的物件較少 因為指定了傳入的引數 介面類 本想用iphone命名的,見諒 public inte ce phone實現介面類 public class huaweiphone imple...