思路:思路:把建立pizza物件從main方法到乙個類中,這樣我們有新的pizza種類時,只需要修改該類就可,其它有建立到pizza物件的**就不需要修改了uml類圖:1)簡單工廠模式是屬於建立型模式,是工廠模式的一種。簡單工廠模式是由乙個工廠物件決定建立出哪一種產品類的例項。簡單工廠模式是工廠模式家族中最簡單實用的模式
2)簡單工廠模式:定義了乙個建立物件的類,由這個類來封裝例項化物件的行為(**)
3)在軟體開發中,當我們會用到大量的建立某種、某類或者某批物件時,就會使用到工廠模式.
但是由於工廠類集中了所有例項的建立邏輯,違反了高內聚責任分配原則,將全部建立邏輯集中到了乙個工廠類中;它所能建立的類只能是事先考慮到的,如果需要新增新的類,則就需要改變工廠類了。當系統中的具體產品類不斷增多時候,可能會出現要求工廠類根據不同條件建立不同例項的需求.這種對條件的判斷和對具體產品型別的判斷交錯在一起,很難避免模組功能的蔓延,對系統的維護和擴充套件非常不利;為了解決這些缺點,就有了工廠方法模式。
現在如果需要跟多的工廠的話,按照簡單工廠模式就需要建立多個工廠類以滿足需求,可維護性、可擴充套件性不強:
建立乙個工廠抽象類,將簡單工廠模式中工廠類的例項化功能抽象成抽象方法放到該工廠抽象類中去,具體的例項化交給子類來實現:
這樣,new子工廠類的時候,會去呼叫父工廠類的工作方法,其構造方法中會呼叫需要被實現的抽象方法,然後就會調到子工廠類中的已經實現的抽象方法。
uml圖:
工廠方法模式通過引入工廠等級結構,解決了簡單工廠模式中工廠類職責太重的問題,但由於工廠方法模式中的每個工廠只生產一類產品,可能會導致系統中存在大量的工廠類,勢必會增加系統的開銷。此時,我們可以考慮將一些相關的產品組成乙個「產品族」,由同乙個工廠來統一生產,這就是抽象工廠模式的基本思想。
定義了乙個inte***ce用於建立相關或有依賴關係的物件族(可以指明多個抽象方法,而工廠方法模式只能指明乙個),而無需指明具體的類;
將工廠抽象成兩層,absfactory(抽象工廠) 和 具體實現的工廠子類。程式設計師可以根據建立物件型別使用對應的工廠子類。這樣將單個的簡單工廠類變成了工廠簇,更利於**的維護和擴充套件。
與工廠方法模式的區別:
抽象工廠模式和工廠方法模式一樣,都符合開閉原則。但是不同的是,工廠方法模式在增加乙個具體產品的時候,都要增加對應的工廠。但是抽象工廠模式只有在新增乙個型別的具體產品時才需要新增工廠。也就是說,工廠方法模式的乙個工廠只能建立乙個具體產品。而抽象工廠模式的乙個工廠可以建立屬於一類型別的多種具體產品。工廠建立產品的個數介於簡單工廠模式和工廠方法模式之間。
uml圖
工廠模式的意義
將例項化物件的**提取出來,放到乙個類中統一管理和維護,達到和主專案的依賴關係的解耦。從而提高項
目的擴充套件和維護性。
三種工廠模式 (簡單工廠模式、工廠方法模式、抽象工廠模式)
設計模式的依賴抽象原則
建立物件例項時,不要直接 new 類, 而是把這個 new 類的動作放在乙個工廠的方法中,並返回。有的書上說,變數不要直接持有具體類的引用。不要讓類繼承具體類,而是繼承抽象類或者是實現 inte***ce(介面)不要覆蓋基類中已經實現的方法。
參考:
設計模式 設計模式之工廠模式
工廠方法模式 建立模式 使用場景?作用?形態?場景 大量類似的實體類 要建立的實體類都是同一本質的東西 披薩 有部分類似功能 準備 烘烤 切法 實現方式不一樣 準備的材料不同 烘烤時間不同 切法不同 將繁瑣複雜的建立類的過程聚集在一起,有序清晰 把具體例項化的過程從客戶 中抽離 作用 1 將建立物件...
c 設計模式 之 工廠模式之 工廠模式
1 uml類圖 實現和依賴關係 實現 sportfactory jeepfactory hatchbackfactory 實現 ifactory 介面 sportcar jeepcar hatchbackcar 實現 icar 介面 依賴 ifactory 依賴 icar sportfactory ...
設計模式 工廠模式之簡單工廠模式
定義 由乙個工廠物件 工廠類 來指定建立某乙個產品類的例項。使用場景 客戶端只需傳入指定的引數即可,工廠類負責建立的物件較少 因為指定了傳入的引數 介面類 本想用iphone命名的,見諒 public inte ce phone實現介面類 public class huaweiphone imple...