抽象工厂模式是工厂方法的进一步抽象与扩充,它的类图与工厂方法一样。它与工厂方法的区别是抽象产品(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设计模式>>