在工廠方法模式中具體工廠負責生產具體的產品,每乙個具體工廠對應一種具體產品,工廠方法具有唯一性,一般情況下,乙個具體工廠中只有乙個或者一組過載的工廠方法。但是有時候我們希望乙個工廠可以提供多個產品物件,而不是單一的產品物件,如乙個電器工廠,它可以生產電視機、電冰箱、空調等多種電器,而不是只生產某一種電器。為了更好地理解抽象工廠模式,我們先引入兩個概念:
(1)產品等級結構:產品等級結構即產品的繼承結構,如乙個抽象類是電視機,其子類有海爾電視機、海信電視機、tcl電視機,則抽象電視機與具體品牌的電視機之間構成了乙個產品等級結構,抽象電視機是父類,而具體品牌的電視機是其子類。
(2)產品族:在抽象工廠模式中,產品族是指由同乙個工廠生產的,位於不同產品等級結構中的一組產品,如海爾電器工廠生產的海爾電視機、海爾電冰箱,海爾電視機位於電視機產品等級結構中,海爾電冰箱位於電冰箱產品等級結構中,海爾電視機、海爾電冰箱構成了乙個產品族。
產品等級結構與產品族示意圖如圖3所示:
圖3 產品族與產品等級結構示意圖
在圖3中,不同顏色的多個正方形、圓形和橢圓形分別構成了三個不同的產品等級結構,而相同顏色的正方形、圓形和橢圓形構成了乙個產品族,每乙個形狀物件都位於某個產品族,並屬於某個產品等級結構。圖3中一共有五個產品族,分屬於三個不同的產品等級結構。我們只要指明乙個產品所處的產品族以及它所屬的等級結構,就可以唯一確定這個產品。
當系統所提供的工廠生產的具體產品並不是乙個簡單的物件,而是多個位於不同產品等級結構、屬於不同型別的具體產品時就可以使用抽象工廠模式。抽象工廠模式是所有形式的工廠模式中最為抽象和最具一般性的一種形式。抽象工廠模式與工廠方法模式最大的區別在於,工廠方法模式針對的是乙個產品等級結構,而抽象工廠模式需要面對多個產品等級結構,乙個工廠等級結構可以負責多個不同產品等級結構中的產品物件的建立。當乙個工廠等級結構可以建立出分屬於不同產品等級結構的乙個產品族中的所有物件時,抽象工廠模式比工廠方法模式更為簡單、更有效率。抽象工廠模式示意圖如圖4所示:
圖4 抽象工廠模式示意圖
在圖4中,每乙個具體工廠可以生產屬於乙個產品族的所有產品,例如生產顏色相同的正方形、圓形和橢圓形,所生產的產品又位於不同的產品等級結構中。如果使用工廠方法模式,圖4所示結構需要提供15個具體工廠,而使用抽象工廠模式只需要提供5個具體工廠,極大減少了系統中類的個數。
】
工廠三兄弟之抽象工廠模式(二)
在工廠方法模式中具體工廠負責生產具體的產品,每乙個具體工廠對應一種具體產品,工廠方法具有唯一性,一般情況下,乙個具體工廠中只有乙個或者一組過載的工廠方法。但是有時候我們希望乙個工廠可以提供多個產品物件,而不是單一的產品物件,如乙個電器工廠,它可以生產電視機 電冰箱 空調等多種電器,而不是只生產某一種...
工廠三兄弟之抽象工廠模式(三)
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!抽象工廠模式為建立一組物件提供了一種解決方案。與工廠方法模式相比,抽象工廠模式中的具體工廠不只是建立一種產品,它負責建立一族產品。抽象工廠模式定義如下 抽象工廠模式 abstract factory pattern 提供乙個建立一系列相關或相互依賴...
工廠三兄弟之簡單工廠模式(二)
簡單工廠模式並不屬於gof 23個經典設計模式,但通常將它作為學習其他工廠模式的基礎,它的設計思想很簡單,其基本流程如下 首先將需要建立的各種不同物件 例如各種不同的chart物件 的相關 封裝到不同的類中,這些類稱為具體產品類,而將它們公共的 進行抽象和提取後封裝在乙個抽象產品類中,每乙個具體產品...