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

来源:互联网 发布:好看的网络剧排行榜 编辑:程序博客网 时间:2024/05/29 03:26
       从设计模式的类型来说,简单工厂模式是属于创建性模式,又叫做静态工厂方法模式,但不属于23中GOF设计模式之一,简单的工厂模式是由一个工厂对象决定创建出哪一种产品类的实例,简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。
        那么到底什么是简单工厂模式?我们中午在中快食堂吃饭,中快食堂满足了我们的需求,这里的中快食堂就是一个简单的工厂,在现实生活中工厂是负责生产产品的,,同样在设计模式中,简单工厂模式我们也可以理解为负责生产对象的一个类,我们平常编程中,当使用new关键字创建一个对象时,此时该类就依赖与这个对象,也就是她们之间的耦合度高,当需求变化时,我们就不得不去修改此类的源码,此时我们可以运用oo很重要的原则去解决这一问题,该原则就是封装改变,自然也就要找到改变的代码,然后把改变的代码用类来封装,这样的一种思路也就是我们简单工厂模式的实现方式了,举个生活中的例子。
       寒暑假食堂没有开门,提高班的孩子,有的在外面吃饭,当然手巧的孩子也可以自己在家做饭吃,但是自己要做饭比较麻烦哈,因为要去元辰超市买菜,油盐酱醋肯定少不了,然而,也可以选择去九之巢,烧饼,灌饼,煎饼随你挑,这里,每个小摊位就充当简单工厂的角色,那么这些生活中我们每天都在经历的事情,在我们的编程世界中又是如何实现的呢。

     自己做饭的情况:

 /// <summary>    /// 自己做饭的情况    /// 没有简单工厂之前,客户想吃什么菜只能自己炒的    /// </summary>    public class Customer    {        /// <summary>        /// 烧菜方法        /// </summary>        /// <param name="type"></param>        /// <returns></returns>        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();        }    } /// <summary>    /// 菜抽象类    /// </summary>    public abstract class Food    {        // 输出点了什么菜        public abstract void Print();    }    /// <summary>    /// 酸辣土豆丝这道菜    /// </summary>    public class  ChiliSourPotato : Food    {        public override void Print()        {            Console.WriteLine("一份酸辣土豆丝!");        }    }    /// <summary>    /// 姜汁皮蛋这道菜    /// </summary>    public class PreservedEggSinGingerSauce : Food    {        public override void Print()        {            Console.WriteLine("一份姜汁皮蛋");        }    }
       毛爷爷打江山的时候说,自己动手风衣足食,紧张的学习之后,自己动手做事,也不失为美事一件,但是有时候重复做一件事儿,总想着要买什么菜啊,中午做什么啊,就会感到厌烦,保不准做饭的时候就会把盐当成白糖,那午饭就......,所以,偶尔我们可以去小餐馆,呼呼,这里的餐馆就相当于简单工厂,我们可以把这些操作交给餐馆去做,此时消费者对菜的依赖关系从直接变成间接,这样就实现了面向对象的另一个原则,降低对象之间的耦合度。每次去餐馆吃饭,你想到了么?这个也可以在我们的编程世界中实现,代码如下: 

      

 /// <summary>    /// 顾客充当客户端,负责调用简单工厂来生产对象    /// 即客户点菜,厨师(相当于简单工厂)负责烧菜(生产的对象)    /// </summary>    class Customer    {        static void Main(string[] args)        {            // 客户想点酸辣土豆丝                    Food food1 = FoodSimpleFactory.ChiliSourPotatod("酸辣土豆丝");            food1.Print();            // 客户想点一个姜汁皮蛋            Food food2 = FoodSimpleFactory. PreservedEggSinGingerSauce("姜汁皮蛋");            food2.Print();            Console.Read();        }    }    /// <summary>    /// 菜抽象类    /// </summary>    public abstract class Food    {        // 输出点了什么菜        public abstract void Print();    }    /// <summary>    /// 酸辣土豆丝这道菜    /// </summary>    public class ChiliSourPotatod : Food    {        public override void Print()        {            Console.WriteLine("一份酸辣土豆丝!");        }    }    /// <summary>    /// 姜汁皮蛋这道菜    /// </summary>    public class PreservedEggSinGingerSauce : Food    {        public override void Print()        {            Console.WriteLine("一份姜汁皮蛋");        }    }    /// <summary>    /// 简单工厂类, 负责 炒菜    /// </summary>    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图如下:
         

        通过楚广明C#视频的学习,对c#有了一定的了解,带着这一点懵懵懂懂的了解,我走进了大鸟和小菜的世界,一个个短小精炼的小故事,一场场面向对象编程思维的舞蹈,成为了《大话设计模式》这本书最温馨美丽的部分,喜欢那个好学,天真,执着的小菜,崇拜那个善于启发,经验老到的大鸟,就这样,慢慢的靠近.........

25 2
原创粉丝点击