设计模式 简单工厂模式

简单工厂模式

一.什么是简单工厂?

传统理解:简单工厂属于创建型模式,有叫做静态工厂方法模式,但不属于23中GOF设计模式之一。简单工厂是由一个工厂对象决定创建出那一种产品类的实例。简单工厂模式是工厂模式家族中最简单的模式,可以理解为是不同工厂模式的一个特殊实现。

个人理解:简单工厂并非设计模式而是编程习惯,最起码它不属于GOF23种设计模式之一,但是经常可以看到使用简单工厂的项目,因为它的思想很简单。简单工厂,可以从字面理解是工厂,既然是工厂就是用来生产产品的,在编程里那么他就是用来创建对象的实例的。那么在工厂类中尽可能不要出现业务逻辑,不然会污染工厂。要做到单一职责,工厂就是用来生产对象的实例的。作用其实和new作用一样。

二.分析:

用皮具厂的例子把!

首先老板接到一订单,客户要求皮具厂生产皮包(钱包,旅行包,背包,电脑包)于是乎,老板就创办一个工厂(皮包抽象产品)。皮包工厂创建多个车间(皮包的具体产品)用来生产具体的产品,如钱包,旅行包。接下来我们就用编程来实现吧。

二.Demo:

1.普通实现工厂模式:

枚举:

 /// <summary>
    /// 包包类型
    /// </summary>
    public enum PageEnum
    {
        /// <summary>
        /// 钱包
        /// </summary>
        Wallet = 0,

        /// <summary>
        /// 旅行包
        /// </summary>
        TravellingBag = 1
    }


其他的都可以参考泛型方式实现简单工厂模式的案例,下面就写个工厂的例子

/// <summary>
        /// 创建对象实例
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public IPage CreateInstance(PageEnum type)
        {
            IPage p = null;
            switch (type)
            {
                case PageEnum.Wallet:
                    p = new Wallet();
                    break;
                case PageEnum.TravellingBag:
                    p = new TravellingBag();
                    break;
                default:
                    break;
            }
            return p;
        }

 

2.通过泛型类实现简单工厂模式:

接口:

 /// <summary>
    /// 产品抽象类(包包)
    /// </summary>
   public interface IPage
    {
        /// <summary>
        /// 制作
        /// </summary>
       void Make();
    }

 

产品1:

 /// <summary>
    /// 钱包
    /// </summary>
   public class Wallet:IPage
   {
       /// <summary>
       /// 实现接口中的制作函数
       /// </summary>
       public void Make()
       {
           Console.WriteLine("生产钱包");
       }
   }

 

产品2:

  /// <summary>
    /// 旅行包
    /// </summary>
    class TravellingBag:IPage
    {
        /// <summary>
        /// 实现接口中的制作函数
        /// </summary>
        public void Make()
        {
            Console.WriteLine("生产旅行包");
        }
    }

 

工厂:

这里使用了new约束,参考官网文档:

https://msdn.microsoft.com/zh-CN/library/sd2w2ew5.aspx

 /// <summary>
    /// 包包工厂
    /// </summary>
    public class PageFactory<T> where T : new()
    {
        /// <summary>
        /// 创建对象实例
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public T CreateInstance()
        {
            return new T();
        }
    }


调用:

 class Program
    {
        static void Main(string[] args)
        {
            //接了一单生意,生产一批皮包,首先创建一个工厂
            var factory = new PageFactory<Wallet>();
            var page = factory.CreateInstance();
            page.Make();
            Console.Read();
        }
    }


结果:

 

三注意:

 
posted @ 2017-01-17 11:03  土豆哥  阅读(226)  评论(0编辑  收藏  举报