一.介绍
简单工厂模式(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 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 { Apple = 1, Orange = 2 }
根据不同参数去获取对应的实例。
public static void Main(string[] args) { IFruit fruit = Factory.CreateFruit(FruitType.Apple); Console.WriteLine(fruit.Name); }
四.总结
优点是,分离了实例的创建者和调用者,不让调用者直接去创建实例,而是通过工厂类去创建,明确了各自职责,有利于系统优化。
缺点是,所有创建类的逻辑判断都放在工厂类中,如果需要创建新的类,那就只能去修改工厂类,这就违反了开闭原则,不应当修改底层类,应该通过拓展去加功能。
所以,简单工厂模式一般是在需要创建的类不多的简单情况下使用。