工厂模式三部曲之三_抽象工厂模式(附三部曲源码)

      抽象工厂模式是对工厂模式的进一步抽象,是工厂模式中最为抽象和最具一般性的一种形态,提供了创建一系列相关或者相互依赖对象的接口,而无需指定他们的类型。

如果你对工厂模式还有些迷惑的,可以回顾下工厂模式的内容:《工厂模式三部曲之二_工厂模式》

 

下面直接引用园中某位博友运用的实例进行讲解:

生活场景:某家具厂为学校生产课桌和座椅,开始只生产木质的课桌和座椅,后来经学校要求,又开始为学校生产铁质的课桌和座椅。
设计目标:实现针对多种成套产品的生产,每套产品有多种不同等级结构的物品组成。
【分析】
抽象产品:虚拟课桌 虚拟椅子
具体产品:木课桌 铁课桌;木椅子 铁椅子
抽象工厂:要生产产品的基类:抽象产品
具体工厂:木工厂=》木桌子,木椅子   铁工厂=》铁桌子,铁椅子

 

角色分析好了就直接进入代码部分:

抽象工厂类:

ExpandedBlockStart.gif 抽象工厂
1      // 抽象工厂:生产课桌 生产椅子
2       public  abstract  class Factory
3     {
4          public  abstract Desk CreateDesk();
5          public  abstract Chair CreateChair();     
6     }

该类中定义了两个抽象方法,一个用来生产桌子,一个用来成产椅子

具体工厂类

ExpandedBlockStart.gif 具体工厂
 1      // 具体工厂(木质产品工厂)
 2       public  class WoodFactory : Factory
 3     {
 4          // 木桌子
 5           public  override Desk CreateDesk()
 6         {
 7              return  new WoodDesk();
 8         }
 9 
10          // 木椅子
11           public  override Chair CreateChair()
12         {
13              return  new WoodChair();
14         }
15     }
16 
17      // 具体工厂(铁质产品工厂)
18       public  class IronFactory : Factory
19     {
20          // 铁桌子
21           public  override Desk CreateDesk()
22         {
23              return  new IronDesk();
24         }
25 
26          // 铁椅子
27           public  override Chair CreateChair()
28         {
29              return  new IronChair();
30         }
31     }

抽象工厂是用来生产一系列相关产品,这里的桌子分木桌子和铁桌子,这两种桌子就是相关产品,同理,木椅子和铁椅子也是相关产品,所以具体工厂分为了木制工厂和铁制工厂,分别用来生产木质产品和铁质产品,所以这里工厂重写了抽象工厂中的抽象方法,分别创建了某种材质的实例。

抽象产品类:

ExpandedBlockStart.gif 抽象产品
 1      // 抽象产品A:课桌
 2       public  abstract  class Desk
 3     {
 4          public  abstract  void ProductDesk(); 
 5     }
 6      // 抽象产品B:椅子
 7       public  abstract  class Chair
 8     {
 9         public  abstract  void ProductChair();
10     }

工厂模式是一个抽象工厂一个抽象产品,抽象工厂模式是多个抽象工厂多个抽象产品。

具体产品类:

ExpandedBlockStart.gif 具体产品
 1      // 具体产品A_1:木课桌
 2       public  class WoodDesk : Desk
 3     {
 4          public  override  void ProductDesk()
 5         {
 6             Console.WriteLine( " Wood Desk....... ");
 7         }
 8     }
 9 
10      // 具体产品A_2:铁课桌
11       public  class IronDesk : Desk
12     {
13          public  override  void ProductDesk()
14         {
15             Console.WriteLine( " Iron Desk....... ");
16         }
17     }
18 
19      // 具体产品B_1:木椅子
20       public  class WoodChair : Chair
21     {
22          public  override  void ProductChair()
23         {
24             Console.WriteLine( " Wood Chair...... ");
25         }
26     }
27 
28      // 具体产品B_2:铁椅子
29       public  class IronChair : Chair
30     {
31          public  override  void ProductChair()
32         {
33             Console.WriteLine( " Iron Chair....... ");
34         }
35     }

具体产品分系列,有铁质系列和木质系列两种,产品分别是桌子椅子。

客户端:

ExpandedBlockStart.gif 客户端
 1      // 客户端
 2       class Program
 3     {
 4          static  void Main( string[] args)
 5         {
 6              // 要求木桌子
 7              Desk desk =  new WoodFactory().CreateDesk();
 8             desk.ProductDesk();
 9 
10              // 要求铁椅子
11              Chair chair =  new IronFactory().CreateChair();
12             chair.ProductChair();
13 
14             Console.ReadKey();
15 
16         }
17     }


运行效果:

 

 

附上三部曲的所有源码:/Files/holyknight-zld/工厂模式/工厂模式三部曲.rar

转载于:https://www.cnblogs.com/holyknight-zld/archive/2012/09/06/AbstractFactory.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值