分享

设计模式-抽象工厂模式 - 阿德涂鸦 - JavaEye技术网站

 orion360doc 2011-03-24

设计模式-抽象工厂模式

文章分类:Java编程 关键字: 设计模式
1.概念
《设计模式》一书中对于抽象工厂模式是这样定义的:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
看过定义后可能有点不知所云,很难很抽象,下面我们举个例子看看吧,延续上篇blog设计模式-工厂方法的例子!

2、示例
Java代码 复制代码 收藏代码
  1. // 产品 Plant接口       
  2. public interface Plant { }//标志接口     
  3. //具体产品PlantA,PlantB       
  4. public class PlantA implements Plant {       
  5.      
  6.  public PlantA () {       
  7.   System.out.println("create PlantA !");       
  8.  }       
  9.      
  10.  public void doSomething() {       
  11.   System.out.println(" PlantA do something ...");       
  12.  }       
  13. }       
  14. public class PlantB implements Plant {       
  15.  public PlantB () {       
  16.   System.out.println("create PlantB !");       
  17.  }       
  18.      
  19.  public void doSomething() {       
  20.   System.out.println(" PlantB do something ...");       
  21.  }       
  22. }       
  23. // 产品 Fruit接口       
  24. public interface Fruit { }       
  25. //具体产品FruitA,FruitB       
  26. public class FruitA implements Fruit {       
  27.  public FruitA() {       
  28.   System.out.println("create FruitA !");       
  29.  }       
  30.  public void doSomething() {       
  31.   System.out.println(" FruitA do something ...");       
  32.  }       
  33. }       
  34. public class FruitB implements Fruit {       
  35.  public FruitB() {       
  36.   System.out.println("create FruitB !");       
  37.  }       
  38.  public void doSomething() {       
  39.   System.out.println(" FruitB do something ...");       
  40.  }       
  41. }       
  42. // 抽象工厂方法       
  43. public interface AbstractFactory {       
  44.  public Plant createPlant();       
  45.  public Fruit createFruit();       
  46. }       
  47. //具体工厂方法       
  48. public class FactoryA implements AbstractFactory {       
  49.  public Plant createPlant() {       
  50.   return new PlantA();       
  51.  }       
  52.  public Fruit createFruit() {       
  53.   return new FruitA();       
  54.  }       
  55. }       
  56. public class FactoryB implements AbstractFactory {       
  57.  public Plant createPlant() {       
  58.   return new PlantB();       
  59.  }       
  60.  public Fruit createFruit() {       
  61.   return new FruitB();       
  62.  }       
  63. }     

Java代码 复制代码 收藏代码
  1. //调用工厂方法      
  2. public Client {      
  3.       public method1() {      
  4.              AbstractFactory instance = new FactoryA();      
  5.              instance.createPlant();      
  6.        }      
  7. }  


3、抽象工厂模式与工厂方法模式的区别
可以这么说,工厂方法模式是一种极端情况的抽象工厂模式,而抽象工厂模式可以看成是工厂方法模式的一种推广。
(1)、其实工厂方法模式是用来创建一个产品的等级结构的,而抽象工厂模式是用来创建多个产品的等级结构的。工厂方法创建一般只有一个方法,创建一种产品。抽象工厂一般有多个方法,创建一系列产品。
(2)、工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。

简而言之->
工厂方法模式:一个抽象产品类,可以派生出多个具体产品类。  
              一个抽象工厂类,可以派生出多个具体工厂类。  
              每个具体工厂类只能创建一个具体产品类的实例。  
抽象工厂模式:多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。  
              一个抽象工厂类,可以派生出多个具体工厂类。  
              每个具体工厂类可以创建多个具体产品类的实例。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多