???? 抽象工廠模式是工廠方法的進(jìn)一步抽象與擴(kuò)充,它的類圖與工廠方法一樣。它與工廠方法的區(qū)別是抽象產(chǎn)品(Abstract Product?)不止一個(gè),從而構(gòu)成了一個(gè)或多個(gè)產(chǎn)品族(Product Factory).在只有一個(gè)產(chǎn)品族的情下,它退化成了工廠方法模式.。下面給出一個(gè)例子來說明;
?????? 微型計(jì)算機(jī)有兩種系列,即產(chǎn)品族有兩個(gè)PC(IBM系列)和Mac(MacIntosh系列)。
?????? 它的類圖如下(來源于參考文獻(xiàn)1)
?無標(biāo)題.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抽象產(chǎn)品與CPU類似.

 在以下情況下,應(yīng)當(dāng)考慮使用抽象工廠模式。

  1,一個(gè)系統(tǒng)應(yīng)當(dāng)不依賴于產(chǎn)品類實(shí)例被創(chuàng)立,組成,和表示的細(xì)節(jié)。這對于所有形態(tài)的工廠模式都是重要的。

  2,這個(gè)系統(tǒng)的產(chǎn)品有多于一個(gè)的產(chǎn)品族。

  3,同屬于同一個(gè)產(chǎn)品族的產(chǎn)品是設(shè)計(jì)成在一起使用的。這一約束必須得在系統(tǒng)的設(shè)計(jì)中體現(xiàn)出來。

  最后,不同的產(chǎn)品以一系列的接口的面貌出現(xiàn),從而使系統(tǒng)不依賴于接口實(shí)現(xiàn)的細(xì)節(jié)。

  其中第二丶第三個(gè)條件是我們選用抽象工廠模式而非其它形態(tài)的工廠模式的關(guān)鍵性條件。
?????
?????


參考文獻(xiàn): 1.http://www.yesky.com/20011203/207977.shtml
???????????????????2.<<java設(shè)計(jì)模式>>