???? 抽象工廠模式是工廠方法的進一步抽象與擴充,它的類圖與工廠方法一樣。它與工廠方法的區別是抽象產品(Abstract Product?)不止一個,從而構成了一個或多個產品族(Product Factory).在只有一個產品族的情下,它退化成了工廠方法模式.。下面給出一個例子來說明;
?????? 微型計算機有兩種系列,即產品族有兩個PC(IBM系列)和Mac(MacIntosh系列)。
?????? 它的類圖如下(來源于參考文獻1)
?無標題.bmp
?????

1 public ? interface ?ComputerProducer {}
2
public ? class ?PCProducer? implements ?ComputerProducer
{
????RAM?createRAM()
????
{
?????????
return ? new ?PCRAM();
????}

????CPU?createCPU()
????
{
?????????
return ? new ?PCCPU()
????}

}
?
?1public?MacProducer?implements?ComputerProducer
?2{
?3???RAM?createRAM()
?4???{
?5?????return?new?MacRAM();
?6???}

?7???CPU?createCPU()
?8???{
?9?????return?new?MacCPU();
10???}

11}
1public?interface?CPU{}
1public?class?MacCPU?implements?CPU{}
1public?class?PCCPU?implements?CPU{}

RAM抽象產品與CPU類似.

 在以下情況下,應當考慮使用抽象工廠模式。

  1,一個系統應當不依賴于產品類實例被創立,組成,和表示的細節。這對于所有形態的工廠模式都是重要的。

  2,這個系統的產品有多于一個的產品族。

  3,同屬于同一個產品族的產品是設計成在一起使用的。這一約束必須得在系統的設計中體現出來。

  最后,不同的產品以一系列的接口的面貌出現,從而使系統不依賴于接口實現的細節。

  其中第二丶第三個條件是我們選用抽象工廠模式而非其它形態的工廠模式的關鍵性條件。
?????
?????


參考文獻: 1.http://www.yesky.com/20011203/207977.shtml
???????????????????2.<<java設計模式>>