首先了解一下简单工厂模式(Simple Factory Pattern),它有一个专门的类来负责创建实例,根据输入参数来决定创建哪一种具体产品类的实例,被创建的实例类通常会实现一个抽象类或接口。
public interface ICar
{
/// <summary>
/// 汽车名称
/// </summary>
/// <returns></returns>
string GetCarName();
/// <summary>
/// 发动机型号
/// </summary>
/// <returns></returns>
string GetEngineModel();
}
public class DaZhong : ICar
{
public string GetCarName()
{
return "大众汽车";
}
public string GetEngineModel()
{
return "EA211";
}
}
public class ChangAn : ICar
{
public string GetCarName()
{
return "长安汽车";
}
public string GetEngineModel()
{
return "GW4G15F";
}
}
public enum CarType
{
/// <summary>
/// 大众
/// </summary>
DaZhong,
/// <summary>
/// 长安
/// </summary>
ChangAn
}
/// <summary>
/// 简单工厂
/// </summary>
public class CarSimpleFactory
{
/// <summary>
/// 根据变量名称创建具体的产品
/// </summary>
/// <param name="carType"></param>
/// <returns></returns>
public static ICar? CreateCar(CarType carType)
{
switch (carType)
{
case CarType.DaZhong:
return new DaZhong();
case CarType.ChangAn:
return new ChangAn();
default:
return null;
}
}
}
// 调用简单工厂
ICar? car1 = CarSimpleFactory.CreateCar(CarType.DaZhong);
ICar? car2 = CarSimpleFactory.CreateCar(CarType.ChangAn);
if (car1 != null)
{
car1.GetCarName();
car1.GetEngineModel();
}
if (car2 != null)
{
car2.GetCarName();
car2.GetEngineModel();
}
工厂方法模式(Factory Method Pattern)解决了简单工厂模式不符合开闭原则的缺点,工厂方法模式是一种创建型设计模式,定义了一个用于创建具体产品对象的接口,将创建过程推迟到子类中完成。
/// <summary>
/// 工厂接口
/// </summary>
public interface ICarFactory
{
ICar CreateCar();
}
/// <summary>
/// 具体工厂-大众
/// </summary>
public class DaZhongFactory : ICarFactory
{
public ICar CreateCar()
{
return new DaZhong();
}
}
/// <summary>
/// 具体工厂-长安
/// </summary>
public class ChangAnFactory : ICarFactory
{
public ICar CreateCar()
{
return new ChangAn();
}
}
// 调用工厂方法
ICarFactory carFactory1 = new DaZhongFactory();
ICar car3 = carFactory1.CreateCar();
car3.GetCarName();
car3.GetEngineModel();
ICarFactory carFactory2 = new ChangAnFactory();
ICar car4 = carFactory2.CreateCar();
car4.GetCarName();
car4.GetEngineModel();