"
一.介绍
简单工厂模式(Simple Factory Pattern)又叫静态工厂方法(Static Factory Method)模式。它属于创建型模式,但它不属于23种设计模式的一种。简单来说,它的作用就是将类的实例化交给一个工厂类去执行。
二.场景
比如我们去水果店买水果,我们只要说出要买什么水果,水果店就会给我们什么水果。这里的水果店相当于一个工厂类,我们买水果就相当于new一个水果类,去水果店买水果就是交给水果店去new水果类,这可以降低我们对水果类对象的依赖,要什么类都交给工厂类去创建。
三.实现
定义父类接口IFruit(水果)。
public interface IFruit
{
public string Name { get; set; }
}
子类继承水果接口。
public class Apple : IFruit
{
public string Name { get; set; } = ""苹果"";
}
public //代码效果参考:https://v.youku.com/v_show/id_XNjQwNjg1NTMyNA==.html
class Orange : IFruit{
public string Name { get; set; } = ""橙"";
}
定义工厂类,和负责实例化对应子类的静态方法。
public class Factory
{
public static IFruit CreateFruit(FruitType type)
{
switch (type)
{
case FruitType.Apple:
return new Apple();
case FruitType.Orange:
return new Orange();
default:
throw new Exception(""没有水果"");
}
}
}
public enum FruitType
{
//代码效果参考:https://v.youku.com/v_show/id_XNjQwMDQwMjI0NA==.html
Apple = 1,Orange = 2
}
根据不同参数去获取对应的实例。
public static void Main(string【】 args)
{
IFruit fruit = Factory.CreateFruit(FruitType.Apple);
Console.WriteLine(fruit.Name);
}
四.总结
优点是,分离了实例的创建者和调用者,不让调用者直接去创建实例,而是通过工厂类去创建,明确了各自职责,有利于系统优化。
缺点是,所有创建类的逻辑判断都放在工厂类中,如果需要创建新的类,那就只能去修改工厂类,这就违反了开闭原则,不应当修改底层类,应该通过拓展去加功能。
所以,简单工厂模式一般是在需要创建的类不多的简单情况下使用。
"