大话设计模式之简单工厂模式
来源:互联网 发布:好看的网络剧排行榜 编辑:程序博客网 时间:2024/05/29 03:26
从设计模式的类型来说,简单工厂模式是属于创建性模式,又叫做静态工厂方法模式,但不属于23中GOF设计模式之一,简单的工厂模式是由一个工厂对象决定创建出哪一种产品类的实例,简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。
那么到底什么是简单工厂模式?我们中午在中快食堂吃饭,中快食堂满足了我们的需求,这里的中快食堂就是一个简单的工厂,在现实生活中工厂是负责生产产品的,,同样在设计模式中,简单工厂模式我们也可以理解为负责生产对象的一个类,我们平常编程中,当使用new关键字创建一个对象时,此时该类就依赖与这个对象,也就是她们之间的耦合度高,当需求变化时,我们就不得不去修改此类的源码,此时我们可以运用oo很重要的原则去解决这一问题,该原则就是封装改变,自然也就要找到改变的代码,然后把改变的代码用类来封装,这样的一种思路也就是我们简单工厂模式的实现方式了,举个生活中的例子。
寒暑假食堂没有开门,提高班的孩子,有的在外面吃饭,当然手巧的孩子也可以自己在家做饭吃,但是自己要做饭比较麻烦哈,因为要去元辰超市买菜,油盐酱醋肯定少不了,然而,也可以选择去九之巢,烧饼,灌饼,煎饼随你挑,这里,每个小摊位就充当简单工厂的角色,那么这些生活中我们每天都在经历的事情,在我们的编程世界中又是如何实现的呢。
通过楚广明C#视频的学习,对c#有了一定的了解,带着这一点懵懵懂懂的了解,我走进了大鸟和小菜的世界,一个个短小精炼的小故事,一场场面向对象编程思维的舞蹈,成为了《大话设计模式》这本书最温馨美丽的部分,喜欢那个好学,天真,执着的小菜,崇拜那个善于启发,经验老到的大鸟,就这样,慢慢的靠近.........
那么到底什么是简单工厂模式?我们中午在中快食堂吃饭,中快食堂满足了我们的需求,这里的中快食堂就是一个简单的工厂,在现实生活中工厂是负责生产产品的,,同样在设计模式中,简单工厂模式我们也可以理解为负责生产对象的一个类,我们平常编程中,当使用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
- 大话设计模式之简单工厂模式
- 大话设计模式之简单工厂模式
- 大话设计模式之简单工厂模式
- 大话设计模式之简单工厂模式
- 大话设计模式之--简单工厂模式
- 大话设计模式之简单工厂模式
- 《大话设计模式》之简单工厂模式
- 大话设计之简单工厂模式
- 大话设计模式读书笔记之简单工厂
- 大话设计模式之简单工厂模式、抽象工厂模式及工厂方法模式的比较
- 大话设计模式之简单工厂模式&工厂方法模式&抽象工厂模式
- 大话设计模式之简单工厂模式、抽象工厂模式及工厂方法模式的比较
- 大话设计模式之C++实现---简单工厂模式
- 大话设计模式学习之简单工厂模式
- 大话设计模式之简单工厂模式代码
- 大话设计模式之——简单工厂模式
- 大话设计模式之简单工厂模式和概念介绍
- <一>读<<大话设计模式>>之简单工厂模式
- Wireshark 捕获HTTP包的长度 与 IP包里的Total length有差异的原因
- 第四周-自动班作业及实验
- 在DNS服务器中添加MX,A记录
- ubuntu12.04 下的eclipse andriod环境配置
- 创新工场相关
- 大话设计模式之简单工厂模式
- BNU 1065
- MH阅读强化班0805笔记
- [第七篇 UltraGrid中实现下拉Grid(UltraDropDown)]
- java中的static和final
- memcached分布测试报告(一致性哈希情况下的散列函数选择)
- 支持向量机多分类
- iOS开发常用的第三方类库
- Java的逻辑运算符