标签:case method cdn lazy 父类 str 业务逻辑 can 抽象类
简单工厂模式实质是一个工厂类根据传入的参数(产品类继承自同一个工厂类),动态的创建哪个产品类的是实例。
工厂角色:简单工厂模式的核心,负责创建所有具体产品类的实例,工厂类可以被外界直接调用,创建所需的产品实例。
抽象产品角色:是指具体产品角色的父类,负责描述所有产品实例所共有的公共借口。(即所有产品的所共有的并形成抽象)。
具体产品角色:继承自抽象产品角色,一般为多个,是简单工厂模式的创建目标实例,工厂类返回的都是该角色的某一个具体的产品。
日常生活中的中,我们上班到了中午,我们需要吃饭,一种是自己带饭,可前天晚上把饭和菜做好,再用碗装着,第二天上班时再带到公司里来,但这过于麻烦,二种是我们去公司食堂里面吃饭,我们只需告诉老板娘我们想吃什么菜就可以了,煮饭和炒菜事情交个食堂就行了,这里的食堂充当工厂角色,菜充当了具体的产品角色。
在以下情况下可以使用简单工厂模式:
优点:
缺点:
/// <summary> /// 食堂工厂类(工厂角色) /// </summary> public class CanTenFactory { public static Food CreateFood(string foodType) { Food food = null; switch (foodType) { case "Egg": food = new Egg(); break; case "Potatosilk": food = new Potatosilk(); break; } return food; } }
/// <summary> /// 菜抽象类(抽象产品角色) /// </summary> public abstract class Food { public abstract void PrintFood(); }
/// <summary> /// 鸡蛋(具体产品角色) /// </summary> public class Egg : Food { public override void PrintFood() { Console.WriteLine("一份鸡蛋"); } }
/// <summary> /// 土豆丝 (具体的产品角色) /// </summary> public class Potatosilk : Food { public override void PrintFood() { Console.WriteLine("一份土豆丝"); } }
/// <summary> /// 客户端调用 /// </summary> class Program { static void Main(string[] args) { Console.WriteLine("**************您好,您今天吃什么菜呢?**************"); Console.WriteLine("**************麻烦您帮我来一份鸡蛋和土豆丝吧!**************"); Food egg = CanTenFactory.CreateFood("Egg"); egg.PrintFood(); Food potatosilk = CanTenFactory.CreateFood("Potatosilk"); potatosilk.PrintFood(); Console.ReadKey(); } }
结果:
C#设计模式之简单工厂模式(Factory method pattern)
标签:case method cdn lazy 父类 str 业务逻辑 can 抽象类
原文地址:https://www.cnblogs.com/liujie2272/p/13369156.html