码迷,mamicode.com
首页 > 其他好文 > 详细

菜鸟理解的工厂模式(Factory Pattern)是什么样子的?

时间:2017-01-06 00:07:07      阅读:250      评论:0      收藏:0      [点我收藏+]

标签:.com   main   博客   www   nts   blocks   导图   没有   method   

直接开始说了,不浪费园友宝贵的时间!

什么是工厂模式?

 

  在学习前,先问一下:“它是什么?”。

  工厂模式,它是项目里面常用的设计模式之一。

  它是属于创建型模式,简单的理解创建型模式就是将实例化工作交给另外一个对象来完成。

  工厂模式(又称静态工厂模式 Static Factory Method),它算是软件设计模式中最简单的模式了。  

为了解决什么问题?

 

  工厂模式使代码清晰,降低耦合度,调用者通过 接口/抽象类来获得想要的实例化,而无需关心细节上是如何实现的。

  工厂模式是一种典型的解耦模式,迪米特法则在工厂模式中表现的尤为明显。

  (说的比较简单,看了多个网站与博客,我个人认为这句话是工厂模式要解决的最根本的问题,如果有兴趣,可以去看一下其它文章。)

 

什么时候使用?

 

  工厂模式属于创建类模式,在同的条件下创建不同的对象实例时,可以使用工厂方法模式。

  简单的对象,特别是只需要通过new就可以完成创建的对象,无需使用工厂模式。(就是复杂的时候才用工厂,简单不需要用,反而增加程序的复杂度。)

 

实践加深理解:

 

  我请大家去饭店吃饭,有东北菜(我是东北yin),浙江菜,北京菜等等等等,我把你们带进饭店,然后点了东北菜。这个过程,其实就是工厂模式的一种实现。

  首先,不管它是什么菜系的饭店,首先它必须是个“饭店”,必须会做菜(简单描述一下),以下是代码实践过程。

  

  一、我们创建一个饭店的接口类,里面只有一个动作,用来规定所有饭店都必须会做菜!!!

技术分享
    /// <summary>
    /// 饭店接口类
    /// </summary>
    public interface IRestaurants
    {

        /// <summary>
        ///  每个饭店必须会做饭
        /// </summary>
        /// <returns></returns>
        string Cook();
    }
View Code

  二、接下来创建几个菜系的具体饭店。

技术分享
    /// <summary>
    /// 北京饭店
    /// </summary>
    class Beijing : IRestaurants
    {
        public string Cook()
        {
            return "给你北京菜";
        }
    }
View Code
技术分享
    /// <summary>
    /// 东北饭店
    /// </summary>
    class Dongbei : IRestaurants
    {
        public string Cook()
        {
            return "给你东北菜";
        }
    }
View Code
技术分享
    /// <summary>
    /// 浙江饭店
    /// </summary>
    class Zhejiang : IRestaurants
    {
        public string Cook()
        {
            return "给你浙江菜";
        }
    }
View Code

  三、菜馆有了,接下来这个就是简单工厂模式里的重点了。如何让这些饭店能够正确的给我上菜呢?(如果读者说去东北饭店肯定不能给上北京菜,那请您出门右拐,跪哭!!!)

    这时就需要有个“工厂”来协助我要告诉什么饭店做菜了(创建哪个饭店的实例)。

技术分享
    /// <summary>
    /// 饭店工厂类,根据名字创建饭店的实例。
    /// </summary>
    public class RestaurantSimpleFactory
    {
        public IRestaurants GiveMe(string name)
        {
            switch (name)
            {
                case "Dongbei":
                    return new Dongbei();
                case "Beijing":
                    return new Beijing();
                case "Zhejiang":
                    return new Zhejiang();
                default:
                    return new Dongbei();
            }
        }
    }
View Code

  四、准备工作完毕,可以上菜了。

技术分享
    public class Program
    {
        static void Main(string[] args)
        {
            //创建饭店工厂实例
            var restaurantSimpleFactory = new RestaurantSimpleFactory();
            //使用饭店接口招收实现它的饭店实例
            IRestaurants restaurant = restaurantSimpleFactory.GiveMe("Dongbei");
            string cookWhat = restaurant.Cook();
            Console.WriteLine("饭店:" + cookWhat);
            Console.ReadLine();
        }
    }
View Code

 


 

图解:这是根据我个人的理解画的导图,可能与网络上大牛们的不太一样。

 

技术分享

 


Tag:简单工厂中还包含了另一种实现,“工厂方法”,接下来深入学习一下。

如果我的理解有误,想喷就喷没关系,别骂我就好!可能在您的愤怒中会学习到我没有理解的。谢谢观看!

菜鸟理解的工厂模式(Factory Pattern)是什么样子的?

标签:.com   main   博客   www   nts   blocks   导图   没有   method   

原文地址:http://www.cnblogs.com/jayden-en/p/6242839.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!