设计模式C#描述——抽象工厂模式

原创 2007年10月01日 14:09:00
阅读此文应先阅读简单工厂模式与工厂方法模式
抽象工厂模式是对象的创建模式,它是工厂方法模式的进一步推广。
假设一个子系统需要一些产品对象,而这些产品又属于一个以上的产品等级结构。那么为了将消费这些产品对象的责任和创建这些产品对象的责任分开,可以引进抽象工厂模式。这样的话,消费产品的客户不需要直接参与产品的创建工作,而只需要向一个公用的工厂接口请求所需要的产品。
采用抽象工厂模式设计出的系统类图如下。
 
从上图可以看到,抽象工厂模式设计到以下的角色:
抽象工厂角色:担任这个角色的是工厂方法模式的核心,它是与应用系统的商业逻辑无关的。通常使用接口或抽象类实现。
具体工厂角色:这个角色直接在客户端的调用下创建产品的实例。这个角色含有选择合适的产品对象的逻辑,而这个逻辑是与应用系统的商业逻辑紧密相关的。通常使用具体的类实现。
抽象产品角色:担任这个角色的类是抽象工厂方法模式所创建的对象的父类,或它们共同拥有的接口。通常使用接口或抽象类实现这一角色。
具体产品角色:抽象工厂模式所创建的任何产品对象都是某一具体产品类的实例。这是客户端最终需要的东西。通常使用具体类实现这个角色。
下面给出这个系统的原代码:
 
Creator:
public interface Creator
     {
         ProductA factoryA();
         ProductB factoryB();
     }
 
ConcreteCreator1:
     public class ConcreteCreator1:Creator
     {
         public ProductA factoryA()
         {
              return new ProductA1();
         }
         public ProductB factoryB()
         {
              return new ProductB1();
         }
     }
 
ConcreteCreator2:
     public class ConcreteCreator2:Creator
     {
         public ProductA factoryA()
         {
              return new ProductA2();
         }
         public ProductB factoryB()
         {
              return new ProductB2();
         }
     }
 
ProductA:
     public interface ProductA
     {
     }
 
ProductA1:
     public class ProductA1:ProductA
     {
         public ProductA1()
         {
         }
     }
 
ProductA2:
     public class ProductA2:ProductA
     {
         public ProductA2()
         {
         }
     }
 
ProductB:
     public interface ProductB
     {
     }
 
ProductB1:
     public class ProductB1:ProductB
     {
         public ProductB1()
         {
         }
     }
 
ProductB2:
     public class ProductB2:ProductB
     {
         public ProductB2()
         {
         }
     }
在以下情况下应该使用抽象工厂模式:
    一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节,这对于所有形态的工厂模式都是重要的。
这个系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。
同属于同一个产品族的产品是在一起使用的,这一约束必须在系统的设计中体现出来。
系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于实现。
 

相关文章推荐

C#设计模式(4)——抽象工厂模式(Abstract Factory)

一、引言 在上一专题中介绍了工厂方法模式,工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类随着产品类的增加需要增加额外的代码),而工厂方法模式每个具体工厂类只完成单个实例的...

C#设计模式(4)——抽象工厂模式

一、引言 在上一专题中介绍了工厂方法模式,工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类随着产品类的增加需要增加额外的代码),而工厂方法模式每个具体工厂类只完成单个实...

【C#设计模式-抽象工厂模式】

抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。 抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,...

JAVA设计模式之抽象工厂模式

  • 2014年10月14日 10:46
  • 10KB
  • 下载

05_C_设计模式-抽象工厂模式

  • 2014年10月08日 16:24
  • 3.28MB
  • 下载

C# 设计模式----抽象工厂模式

原文地址:C#设计模式(4)——抽象工厂模式一、引言在上一专题中介绍了工厂方法模式,工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类随着产品类的增加需要增加额外的代码),而工...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式C#描述——抽象工厂模式
举报原因:
原因补充:

(最多只允许输入30个字)