抽象工厂模式

概述

  抽象工厂提供一个创建产品的接口来负责创建相关或依赖的对象,而不具体明确指定具体类。也可以这样理解,它负责创建某一特定系列产品,但是它只提供接口方法。

抽象工厂的意义

  假如我们去理发店,给师傅说剪个平头,师傅可能使用推子;剪个杀马特,师傅可能会使用剪刀。我们说出理发的需求,理发师傅就会用不同的处理方法满足我们的需求,我们把需求抽象,这样我们就可以增加具体类来丰富我们的需求;同样,我们把方法抽象,我们也可以来丰富我们的处理方法。这样,我们就不需要修改我们的源代码,直接增加需求和方法的具体类,增加了代码的可扩展性。(开放-闭合原则:对扩展开放,对修改关闭)

实现抽象工厂类

  这里涉及到2个抽象类,即需求和方法:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 
 6 namespace AbstractFactory
 7 {
 8     //需求 抽象类
 9     public abstract class Factory
10     {
11         public abstract Method HairStyle();
12     }
13 
14     //方法 抽象类
15     public abstract class Method
16     {
17         public abstract void UseMethod();
18     }
19 
20 /// <summary>
21 /// 平头
22 /// </summary>
23     public class pingtouFactory : Factory
24     {
25         public override Method HairStyle()
26         {
27             Console.WriteLine(" 需求: 平头");
28             return new pingtouMethod();
29         }
30     }
31     public class pingtouMethod : Method
32     {
33         public override void UseMethod()
34         {
35              Console.WriteLine(" 方法: 平头\n");
36         }
37     }
38 //
39 
40 /// <summary>
41 /// 杀马特
42 /// </summary>
43      public class shamateFactory : Factory
44     {
45          public override Method HairStyle()
46         {
47             Console.WriteLine(" 需求: 杀马特");
48             return new shamateMethod();
49         }
50     }
51     public class shamateMethod : Method
52     {
53         public override void UseMethod()
54         {
55             Console.WriteLine(" 方法: 杀马特\n");
56         }
57     }
58 
59     class Program
60     {
61         static void Main(string[] args)
62         {
63             Factory p = new pingtouFactory();
64             p.HairStyle().UseMethod();
65 
66             Factory s = new shamateFactory();
67             s.HairStyle().UseMethod();
68         }
69     }
70 }

如果我们还需要其他发型,我们只需要增加需求发型的具体类和方法类即可。不需要修改原来的代码。

 但是这里的需求和方法是一一对应的,我们并不能增加一个需求的另外一种或者多种方法。因为接口只有一个,增加多种方法,就需要修改抽象接口类。

posted @ 2015-11-16 15:59  那些消散不去的是寂寞  阅读(288)  评论(0编辑  收藏  举报