工廠三兄弟之抽象工廠模式(二)

Liuwei-Sunny發表於2013-07-13

2 產品等級結構與產品族

       在工廠方法模式中具體工廠負責生產具體的產品,每一個具體工廠對應一種具體產品,工廠方法具有唯一性,一般情況下,一個具體工廠中只有一個或者一組過載的工廠方法。但是有時候我們希望一個工廠可以提供多個產品物件,而不是單一的產品物件,如一個電器工廠,它可以生產電視機、電冰箱、空調等多種電器,而不是隻生產某一種電器。為了更好地理解抽象工廠模式,我們先引入兩個概念:

       (1) 產品等級結構產品等級結構即產品的繼承結構,如一個抽象類是電視機,其子類有海爾電視機、海信電視機、TCL電視機,則抽象電視機與具體品牌的電視機之間構成了一個產品等級結構,抽象電視機是父類,而具體品牌的電視機是其子類。

       (2) 產品族:在抽象工廠模式中,產品族是指由同一個工廠生產的,位於不同產品等級結構中的一組產品,如海爾電器工廠生產的海爾電視機、海爾電冰箱,海爾電視機位於電視機產品等級結構中,海爾電冰箱位於電冰箱產品等級結構中,海爾電視機、海爾電冰箱構成了一個產品族。

       產品等級結構與產品族示意圖如圖3所示:

3  產品族與產品等級結構示意圖

       在圖3中,不同顏色的多個正方形、圓形和橢圓形分別構成了三個不同的產品等級結構,而相同顏色的正方形、圓形和橢圓形構成了一個產品族,每一個形狀物件都位於某個產品族,並屬於某個產品等級結構。圖3中一共有五個產品族,分屬於三個不同的產品等級結構。我們只要指明一個產品所處的產品族以及它所屬的等級結構,就可以唯一確定這個產品。

       當系統所提供的工廠生產的具體產品並不是一個簡單的物件,而是多個位於不同產品等級結構、屬於不同型別的具體產品時就可以使用抽象工廠模式。抽象工廠模式是所有形式的工廠模式中最為抽象和最具一般性的一種形式。抽象工廠模式與工廠方法模式最大的區別在於,工廠方法模式針對的是一個產品等級結構,而抽象工廠模式需要面對多個產品等級結構,一個工廠等級結構可以負責多個不同產品等級結構中的產品物件的建立。當一個工廠等級結構可以建立出分屬於不同產品等級結構的一個產品族中的所有物件時,抽象工廠模式比工廠方法模式更為簡單、更有效率。抽象工廠模式示意圖如圖4所示:

4 抽象工廠模式示意圖

       在圖4中,每一個具體工廠可以生產屬於一個產品族的所有產品,例如生產顏色相同的正方形、圓形和橢圓形,所生產的產品又位於不同的產品等級結構中。如果使用工廠方法模式,圖4所示結構需要提供15個具體工廠,而使用抽象工廠模式只需要提供5個具體工廠,極大減少了系統中類的個數。

 

【作者:劉偉 http://blog.csdn.net/lovelion

相關文章