C# 工厂模式的随笔

 

工厂模式包含三种,简单工厂模式,工厂方法模式,抽象工厂模式。这三种都是解决了一个问题,那就是对象的创建问题。他们的职责就是将对象的创建和对象的使用分离开来。

一、简单工厂模式

简单工厂模式主要用在对单一产品且业务逻辑较为简单的情况中。它主要有三种角色组成:

工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑,根据逻辑不同,产生具体的工厂产品。
抽象产品角色:它一般是具体产品继承的父类或者实现的接口。由接口或者抽象类来实现。
具体产品角色:工厂类所创建的对象就是此角色的实例。

做一个简单工厂模式的实例,如图:

 1  /// <summary>
 2     /// 抽象产品
 3     /// </summary>
 4     public interface IApler
 5     {
 6         void GetApler();
 7     }
 8     /// <summary>
 9     /// 具体产品
10     /// </summary>
11     public class RedApler : IApler
12     {
13         public void GetApler()
14         {
15             Console.WriteLine("这是个红苹果");
16         }
17     }
18     /// <summary>
19     /// 具体产品
20     /// </summary>
21     public class BlueApler : IApler
22     {
23         public void GetApler()
24         {
25             Console.WriteLine("这是个青苹果");
26         }
27     }
28     /// <summary>
29     /// 使用枚举
30     /// </summary>
31     public enum CreateType
32     {
33         RedApler = 0,
34         BlueApler = 1
35     }
36     /// <summary>
37     /// 简单工厂
38     /// </summary>
39     public class Factory
40     {
41         public IApler GetApler(CreateType createType)
42         {
43             switch (createType)
44             {
45                 case CreateType.RedApler:
46                     return new RedApler();
47                 case CreateType.BlueApler:
48                     return new BlueApler();
49                 default:
50                     throw new Exception("");
51             }
52         }
53     }

通过对抽象产品类中的方法的实现,创建两种不同的实现产品,再通过简单工厂去实现对不同产品的实现;但是简单工厂只能对单一类型产品实现,所以使用枚举进行类型的替换;

二、工厂模式

工厂模式又被称为多态性工厂模式。在工厂方法模式中,核心的工厂类不再负责所有的产品的创建,而是将具体创建的工作交给子类去做。该核心类成为一个抽象工厂角色,仅负责给出具体工厂子类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。

以下通过一段代码演示:

/// <summary>
    /// 抽象工厂
    /// </summary>
    public interface IFactory
    {
        IApler CreateApler();
    }
    /// <summary>
    /// 抽象产品
    /// </summary>
    public interface IApler
    {
        void GetApler();
    }
    /// <summary>
    /// 具体产品
    /// </summary>
    public class RedApler : IApler
    {
        public void GetApler()
        {
            Console.WriteLine("这是个红苹果");
        }
    }
    public class BlueApler : IApler
    {
        public void GetApler()
        {
            Console.WriteLine("这是个青苹果");
        }
    }
    /// <summary>
    /// 具体工厂
    /// </summary>
    public class RedAplerFactory : IFactory
    {
        public IApler CreateApler()
        {
            return new RedApler();
        }
    }
    public class BlueAplerFactory : IFactory
    {
        public IApler CreateApler()
        {
            return new BlueApler();
        }
    }

 

  从以上可以看出,工厂模式其实就是简单工厂的一种扩展,实现了可以对多个产品的生产。屏蔽产品类。产品类的实现如何变化,调用者都不需要关心,只需关心产品的接口,只要接口保持不变,系统中的上层模块就不会发生变化。

三、抽象工厂

抽象工厂模式更是工厂模式的一种延深,不仅可以实现对多个抽象对象的实现,主要用来对多个产品族中对象的创建。为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。

抽象工厂的优点/缺点: 

  • 优点:
    • 抽象工厂模式隔离了具体类的生产,使得客户并不需要知道什么被创建。
    • 当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。
    • 增加新的具体工厂和产品族很方便,无须修改已有系统,符合“开闭原则”。
  • 缺点:增加新的产品等级结构很复杂,需要修改抽象工厂和所有的具体工厂类,对“开闭原则”的支持呈现倾斜性。

引用文献http://www.cnblogs.com/toutou/  作  者:请叫我头头哥

 

posted @ 2019-03-14 16:53  宇易  阅读(381)  评论(0)    收藏  举报