C#设计模式之简单工厂模式(Factory method pattern)
标签:case method cdn lazy 父类 str 业务逻辑 can 抽象类
一、什么是简单工厂模式?
简单工厂模式实质是一个工厂类根据传入的参数(产品类继承自同一个工厂类),动态的创建哪个产品类的是实例。
二、简单工厂模式的结构
工厂角色:简单工厂模式的核心,负责创建所有具体产品类的实例,工厂类可以被外界直接调用,创建所需的产品实例。
抽象产品角色:是指具体产品角色的父类,负责描述所有产品实例所共有的公共借口。(即所有产品的所共有的并形成抽象)。
具体产品角色:继承自抽象产品角色,一般为多个,是简单工厂模式的创建目标实例,工厂类返回的都是该角色的某一个具体的产品。
三、简单工厂模式的应用场景
日常生活中的中,我们上班到了中午,我们需要吃饭,一种是自己带饭,可前天晚上把饭和菜做好,再用碗装着,第二天上班时再带到公司里来,但这过于麻烦,二种是我们去公司食堂里面吃饭,我们只需告诉老板娘我们想吃什么菜就可以了,煮饭和炒菜事情交个食堂就行了,这里的食堂充当工厂角色,菜充当了具体的产品角色。
在以下情况下可以使用简单工厂模式:
- 工厂类负责创建的对象比较少:由于创建的对象较少,不会造成工厂方法中的业务逻辑太过复杂。
- 客户端只知道传入工厂类的参数,对于如何创建对象不关心:客户端既不需要关心创建细节,甚至连类名都不需要记住,只需要知道类型所对应的参数。
四、简单工厂模式的优缺点
优点:
- 工厂类是整个模式的关键,包含一些逻辑判断,并根据传入的参数,决定究竟应该创建哪个具体类的对象。
- 通过工厂类,外界可以从具体创建具体产品对象的尴尬局面摆脱出来,仅只需要负责“消费”对象就可以了。
- 不必管这些对象究竟如何创建及如何组织的,明确了各自的职责和权利,有利于整个软件体系结构的优化。
缺点:
- 工厂类集中了所有的实例的创建逻辑,违反了开闭原则,将全部的创建的逻辑集中到一个工厂类中
- 工厂类所创建的产品实例是实现考虑的,如果需要添加新的产品,需修改工厂类。
五、简单工厂模式的实现
///
/// 食堂工厂类(工厂角色)
///
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;
}
}
///
/// 菜抽象类(抽象产品角色)
///
public abstract class Food
{
public abstract void PrintFood();
}
///
/// 鸡蛋(具体产品角色)
///
public class Egg : Food
{
public override void PrintFood()
{
Console.WriteLine("一份鸡蛋");
}
}
///
/// 土豆丝 (具体的产品角色)
///
public class Potatosilk : Food
{
public override void PrintFood()
{
Console.WriteLine("一份土豆丝");
}
}
///
/// 客户端调用
///
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();
}
}
结果:
源码:FactoryMethodPattern
C#设计模式之简单工厂模式(Factory method pattern)
标签:case method cdn lazy 父类 str 业务逻辑 can 抽象类
原文地址:https://www.cnblogs.com/liujie2272/p/13369156.html
评论