那么到底什么是简单工厂模式?我们中午在中快食堂吃饭,中快食堂满足了我们的需求,这里的中快食堂就是一个简单的工厂,在现实生活中工厂是负责生产产品的,,同样在设计模式中,简单工厂模式我们也可以理解为负责生产对象的一个类,我们平常编程中,当使用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#有了一定的了解,带着这一点懵懵懂懂的了解,我走进了大鸟和小菜的世界,一个个短小精炼的小故事,一场场面向对象编程思维的舞蹈,成为了《大话设计模式》这本书最温馨美丽的部分,喜欢那个好学,天真,执着的小菜,崇拜那个善于启发,经验老到的大鸟,就这样,慢慢的靠近.........