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

转载 2008年09月30日 00:51:00

 

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

       阅读此文应先阅读简单工厂模式与工厂方法模式

抽象工厂模式是对象的创建模式,它是工厂方法模式的进一步推广。

假设一个子系统需要一些产品对象,而这些产品又属于一个以上的产品等级结构。那么为了将消费这些产品对象的责任和创建这些产品对象的责任分开,可以引进抽象工厂模式。这样的话,消费产品的客户不需要直接参与产品的创建工作,而只需要向一个公用的工厂接口请求所需要的产品。

采用抽象工厂模式设计出的系统类图如下。

10223.jpg

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />

从上图可以看到,抽象工厂模式设计到以下的角色:

抽象工厂角色:担任这个角色的是工厂方法模式的核心,它是与应用系统的商业逻辑无关的。通常使用接口或抽象类实现。

具体工厂角色:这个角色直接在客户端的调用下创建产品的实例。这个角色含有选择合适的产品对象的逻辑,而这个逻辑是与应用系统的商业逻辑紧密相关的。通常使用具体的类实现。

抽象产品角色:担任这个角色的类是抽象工厂方法模式所创建的对象的父类,或它们共同拥有的接口。通常使用接口或抽象类实现这一角色。

具体产品角色:抽象工厂模式所创建的任何产品对象都是某一具体产品类的实例。这是客户端最终需要的东西。通常使用具体类实现这个角色。

下面给出这个系统的原代码:

 

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#设计模式02-抽象工厂模式(附源码)

抽象工厂模式是所有工厂模式中最为抽象的模式,是抽象程度最高的模式,也是最难理解的一种工厂模式。         现在举一个生活中的案例来说明抽象工厂模式,电视是我们生活中必不可说的电器,但是电视有很多...
  • bhdxmaomi
  • bhdxmaomi
  • 2016年01月12日 15:07
  • 1086

C++设计模式——抽象工厂模式(含实例)

伟创力(世界500强企业),公司有笔记本生产车间、电视机车间、空调车间、电话生产等车间,各生产车间各行其责,生产出不同类型的产品。伟创力不再是生产单一产品的企业,而是生产出多种不同类型的产品,各产品属...
  • swqqcs
  • swqqcs
  • 2014年09月08日 20:35
  • 1803

Asp.net的抽象工厂模式

为什么要使用工厂模式呢?首先
  • wingahi
  • wingahi
  • 2014年05月26日 13:40
  • 1684

Java设计模式—工厂方法模式&抽象工厂模式

工厂方法模式与抽象工厂模式都是设计模式中重要而且常见的模式。 通用类图如下:         在工厂方法模式中,抽象产品类Product负责定义产品的共性,实现对事物最抽象的定义;C...
  • qq_25827845
  • qq_25827845
  • 2016年09月11日 15:07
  • 4207

【java设计模式】之 抽象工厂(Abstract Factory)模式

1. 女娲的失误         上一节学习了工厂模式,女娲运用了该模式成功创建了三个人种,可是问题来了,她发现没有性别……这失误也忒大了点吧……竟然没有性别,那岂不是……无奈,只好抹掉重来了,于是所...
  • eson_15
  • eson_15
  • 2016年04月26日 23:49
  • 11304

抽象工厂模式:实现ASP.NET访问不同数据库

在ASP.NET网站开发中可能会遇到要更换数据库,如将Aceess换为SQL Server ,由于Aceess引用System.Data.OleDb命名空间,SQL Server引用Syste...
  • judyge
  • judyge
  • 2015年05月07日 08:43
  • 349

设计模式——抽象工厂模式详解

0.前言写在最前面,本人的设计模式类博文,建议先看博文前半部分的理论介绍,再看后半部分的实例分析,最后再返回来复习一遍理论介绍,这时候你就会发现我在重点处标红的用心,对于帮助你理解设计模式有奇效哦~无...
  • SEU_Calvin
  • SEU_Calvin
  • 2016年08月21日 17:05
  • 10119

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

要想正确的理解设计模式,首先必须明确它是为了解决什么问题而提出来的。 抽象设计模式概念:         针对抽象工厂这个设计模式,我查找了不少资料,感觉只有涉及产品级别和产品族的才是理解了抽象工厂设...
  • u012909091
  • u012909091
  • 2014年08月02日 16:52
  • 3508

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

本文属于23种设计模式系列。 继续前面简单工厂模式和工厂方法模式的例子,以汽车配件制造介绍抽象工厂模式。...
  • jason0539
  • jason0539
  • 2015年04月11日 08:26
  • 51853

设计模式系列——三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)

设计模式系列——三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)  被腾讯笔试打击到了,腾讯笔试的设计模式题目都没有做对过,所以我要学习下设计模式,就买了入门的《...
  • u010412301
  • u010412301
  • 2017年02月08日 11:46
  • 266
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式C#描述——抽象工厂模式
举报原因:
原因补充:

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