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

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

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

 

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

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

 

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

抽象工厂类:

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

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

具体工厂类

具体工厂
 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     }

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

抽象产品类:

抽象产品
 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     }

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

具体产品类:

具体产品
 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     }

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

客户端:

客户端
 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

posted @ 2012-09-06 09:26  HolyKnight  阅读(1069)  评论(0编辑  收藏  举报