大话设计模式之简单工厂模式

最后更新于:2022-04-01 06:32:49

从设计模式的类型来说,简单工厂模式是属于创建性模式,又叫做静态工厂方法模式,但不属于23中[GOF](http://baike.baidu.com/link?url=uPsikCi-gAyc4SH5sLMa-a5VUL_tN9V9hzP5xGTvX7qhe4U7RybvWR56lvOVHC8H_uC3AbgubDoc6joxNMPTaq)设计模式之一,简单的工厂模式是由一个工厂对象决定创建出哪一种产品类的实例,简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。 那么到底什么是简单工厂模式?我们中午在中快食堂吃饭,中快食堂满足了我们的需求,这里的中快食堂就是一个简单的工厂,在现实生活中工厂是负责生产产品的,,同样在设计模式中,简单工厂模式我们也可以理解为负责生产对象的一个类,我们平常编程中,当使用new关键字创建一个对象时,此时该类就依赖与这个对象,也就是她们之间的耦合度高,当需求变化时,我们就不得不去修改此类的源码,此时我们可以运用oo很重要的原则去解决这一问题,该原则就是封装改变,自然也就要找到改变的代码,然后把改变的代码用类来封装,这样的一种思路也就是我们简单工厂模式的实现方式了,举个生活中的例子。 寒暑假食堂没有开门,提高班的孩子,有的在外面吃饭,当然手巧的孩子也可以自己在家做饭吃,但是自己要做饭比较麻烦哈,因为要去元辰超市买菜,油盐酱醋肯定少不了,然而,也可以选择去九之巢,烧饼,灌饼,煎饼随你挑,这里,每个小摊位就充当简单工厂的角色,那么这些生活中我们每天都在经历的事情,在我们的编程世界中又是如何实现的呢。 自己做饭的情况: ~~~ ///    /// 自己做饭的情况   /// 没有简单工厂之前,客户想吃什么菜只能自己炒的   ///    public class Customer   {       ///        /// 烧菜方法       ///        ///        ///        public static Food Cook(string type)       {           Food food = null;           // 珊珊说:我想吃酸辣土豆丝怎么办?           // 澜澜说:那你就自己烧啊!           // 珊珊说: 好吧,那就自己做吧!           if (type.Equals("酸辣土豆丝"))           {               food = new ChiliSourPotato();           }           // 我还想吃土姜汁皮蛋, 这个还是得自己做           // 我觉得自己做好麻烦,如果能有人帮我做就好了?           else if (type.Equals("姜汁皮蛋"))           {               food = new PreservedEggSinGingerSauce();           }           return food;       }          static void Main(string[] args)       {                      Food food1 = Cook("酸辣土豆丝");           food1.Print();           Food food2 = Cook("姜汁皮蛋");           food1.Print();           Console.Read();       }   }   ///    /// 菜抽象类   ///    public abstract class Food   {       // 输出点了什么菜       public abstract void Print();   }   ///    /// 酸辣土豆丝这道菜   ///    public class  ChiliSourPotato : Food   {       public override void Print()       {           Console.WriteLine("一份酸辣土豆丝!");       }   }   ///    /// 姜汁皮蛋这道菜   ///    public class PreservedEggSinGingerSauce : Food   {       public override void Print()       {           Console.WriteLine("一份姜汁皮蛋");       }   }   ~~~ 毛爷爷打江山的时候说,自己动手风衣足食,紧张的学习之后,自己动手做事,也不失为美事一件,但是有时候重复做一件事儿,总想着要买什么菜啊,中午做什么啊,就会感到厌烦,保不准做饭的时候就会把盐当成白糖,那午饭就......,所以,偶尔我们可以去小餐馆,呼呼,这里的餐馆就相当于简单工厂,我们可以把这些操作交给餐馆去做,此时消费者对菜的依赖关系从直接变成间接,这样就实现了面向对象的另一个原则,降低对象之间的耦合度。每次去餐馆吃饭,你想到了么?这个也可以在我们的编程世界中实现,代码如下:         ~~~ ///       /// 顾客充当客户端,负责调用简单工厂来生产对象      /// 即客户点菜,厨师(相当于简单工厂)负责烧菜(生产的对象)      ///       class Customer      {          static void Main(string[] args)          {              // 客户想点酸辣土豆丝                      Food food1 = FoodSimpleFactory.ChiliSourPotatod("酸辣土豆丝");              food1.Print();                 // 客户想点一个姜汁皮蛋              Food food2 = FoodSimpleFactory. PreservedEggSinGingerSauce("姜汁皮蛋");              food2.Print();                 Console.Read();          }      }         ///       /// 菜抽象类      ///       public abstract class Food      {          // 输出点了什么菜          public abstract void Print();      }         ///       /// 酸辣土豆丝这道菜      ///       public class ChiliSourPotatod : Food      {          public override void Print()          {              Console.WriteLine("一份酸辣土豆丝!");          }      }         ///       /// 姜汁皮蛋这道菜      ///       public class PreservedEggSinGingerSauce : Food      {          public override void Print()          {              Console.WriteLine("一份姜汁皮蛋");          }      }         ///       /// 简单工厂类, 负责 炒菜      ///       public class FoodSimpleFactory      {          public static Food CreateFood(string type)          {              Food food = null;              if (type.Equals("酸辣土豆丝"))              {                  food= new ChiliSourPotatod();              }              else if (type.Equals("姜汁皮蛋"))              {                  food= new PreservedEggSinGingerSauce();              }                 return food;          }      }   ~~~ 接着我们来介绍一下简单工厂模式中的UML图,通过前面我们知道,简单工厂模式又叫静态方法模式(因为工厂类都定义了一个静态方法),由一个工厂类根据传入的参数决定创建出哪一种产品类的实例(通俗点表达:通过客户下的订单来负责烧那种菜)。以上述去餐馆吃饭为例,简单工厂模式的UML图如下:          ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-12-30_5683743246ec9.jpg) 通过楚广明C#视频的学习,对c#有了一定的了解,带着这一点懵懵懂懂的了解,我走进了大鸟和小菜的世界,一个个短小精炼的小故事,一场场面向对象编程思维的舞蹈,成为了《大话设计模式》这本书最温馨美丽的部分,喜欢那个好学,天真,执着的小菜,崇拜那个善于启发,经验老到的大鸟,就这样,慢慢的靠近.........
';