zoukankan      html  css  js  c++  java
  • 菜鸟理解的工厂模式(Factory Pattern)是什么样子的?

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

    什么是工厂模式?

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

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

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

      工厂模式(又称静态工厂模式 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:简单工厂中还包含了另一种实现,“工厂方法”,接下来深入学习一下。

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

  • 相关阅读:
    Jquery实现form表单提交后局部刷新页面的多种方法
    HTML5:'data-'属性的作用是什么
    ASP.NET MVC传递Model到视图的多种方式总结(二)__关于ViewBag、ViewData和TempData的实现机制与区别
    Var与Dynamic的区别
    ASP.NET MVC传递Model到视图的多种方式总结(一)__通用方式的使用
    动态规划(最大公共子序列)
    后缀名为properties,config和xml的文件内容读取
    初学者易犯的的错误
    jdk1.6与Myeclipse的冲突造成的
    微信红包算法思想
  • 原文地址:https://www.cnblogs.com/jayden-en/p/6242839.html
Copyright © 2011-2022 走看看