`
ldjsyl
  • 浏览: 192026 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

设计模式-抽象工厂模式

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

2、示例
// 产品 Plant接口    
public interface Plant { }//标志接口  
//具体产品PlantA,PlantB    
public class PlantA implements Plant {    
  
 public PlantA () {    
  System.out.println("create PlantA !");    
 }    
  
 public void doSomething() {    
  System.out.println(" PlantA do something ...");    
 }    
}    
public class PlantB implements Plant {    
 public PlantB () {    
  System.out.println("create PlantB !");    
 }    
  
 public void doSomething() {    
  System.out.println(" PlantB do something ...");    
 }    
}    
// 产品 Fruit接口    
public interface Fruit { }    
//具体产品FruitA,FruitB    
public class FruitA implements Fruit {    
 public FruitA() {    
  System.out.println("create FruitA !");    
 }    
 public void doSomething() {    
  System.out.println(" FruitA do something ...");    
 }    
}    
public class FruitB implements Fruit {    
 public FruitB() {    
  System.out.println("create FruitB !");    
 }    
 public void doSomething() {    
  System.out.println(" FruitB do something ...");    
 }    
}    
// 抽象工厂方法    
public interface AbstractFactory {    
 public Plant createPlant();    
 public Fruit createFruit();    
}    
//具体工厂方法    
public class FactoryA implements AbstractFactory {    
 public Plant createPlant() {    
  return new PlantA();    
 }    
 public Fruit createFruit() {    
  return new FruitA();    
 }    
}    
public class FactoryB implements AbstractFactory {    
 public Plant createPlant() {    
  return new PlantB();    
 }    
 public Fruit createFruit() {    
  return new FruitB();    
 }    
}   


//调用工厂方法   
public Client {   
      public method1() {   
             AbstractFactory instance = new FactoryA();   
             instance.createPlant();   
       }   
}


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

简而言之->
工厂方法模式:一个抽象产品类,可以派生出多个具体产品类。  
              一个抽象工厂类,可以派生出多个具体工厂类。  
              每个具体工厂类只能创建一个具体产品类的实例。  
抽象工厂模式:多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。  
              一个抽象工厂类,可以派生出多个具体工厂类。  
              每个具体工厂类可以创建多个具体产品类的实例。
5
4
分享到:
评论
7 楼 caowei3047 2011-07-11  
还是GOF讲的生动易懂
6 楼 nuanguangfp 2010-03-09  
我觉得经你这么一讲,思路开阔很多,我看到设计模式里批萨的例子还有就是概念觉得理解上有障碍,但是我还是想问既然抽象工厂模式的极端是工厂方法模式,我还是不能明白为什么要将他分成两块
5 楼 Durian 2010-01-21  
ldjsyl 写道
javaeye的编辑器,有时候有点难用,一不小心,格式就没了

不小心切换编辑模式了?
4 楼 wangacidlemon 2009-06-23  
抽象工厂模式,除了减少具体工厂类之外,还有哪些好处呢?
3 楼 frederick_hai 2009-03-18  
 
2 楼 Rjx2008 2009-01-21  
..
1 楼 ldjsyl 2008-04-20  
javaeye的编辑器,有时候有点难用,一不小心,格式就没了

相关推荐

Global site tag (gtag.js) - Google Analytics