在简单工厂模式中通过工厂Factory获取不同的对象,但是有一个明显的缺点——简单工厂模式系统难以扩展!
一旦添加新产品就不得不修改简单工厂方法,这样就会造成简单工厂的实现逻辑过于复杂,
可以通过工厂方法模式可以解决简单工厂模式中存在的这个问题,看代码:
/// <summary>
/// 汽车抽象类
/// </summary>
public abstract class AuthCar
{
/// <summary>
/// 输出制造了什么汽车
/// </summary>
public abstract void CreatorCar();
} /// <summary>
/// 派生类-橘黄色轿车
/// </summary>
public class _OriangeCar : AuthCar
{
public override void CreatorCar()
{
Console.WriteLine("生产了橘黄色轿车!");
}
} /// <summary>
/// 派生类-黑色轿车
/// </summary>
public class _BlackCar : AuthCar
{
public override void CreatorCar()
{
Console.WriteLine("生产了黑色轿车");
}
}
汽车类下面有两种不同颜色的汽车(橘黄色和黑色),下面通过工厂抽象类得到不同的汽车。
/// <summary>
/// 工厂类
/// </summary>
public abstract class FactoryCreator
{
/// <summary>
/// 获取汽车对象
/// </summary>
/// <returns></returns>
public abstract AuthCar _AuthCar();
} /// <summary>
/// 得到黑色汽车实例
/// </summary>
public class BlackCarFactoryMethod : FactoryCreator
{
public override AuthCar _AuthCar()
{
return new _BlackCar();
}
}
/// <summary>
/// 得到橘黄色汽车实例
/// </summary>
public class OriangeFactoryMethod : FactoryCreator
{
public override AuthCar _AuthCar()
{
return new _OriangeCar();
}
}
测试
class Program
{
static void Main(string[] args)
{
FactoryCreator factoryCreator = new BlackCarFactoryMethod(); FactoryCreator factoryCreator = new OriangeFactoryMethod(); factoryCreator._AuthCar().CreatorCar(); Console.ReadKey();
}
}
使用工厂方法实现的系统,如果系统需要添加新产品时,我们可以利用多态性来完成系统的扩展,对于抽象工厂类和具体工厂中的代码都不需要做任何改动。
例如,我们我们还想输出一辆绿色汽车,此时我们只需要定义一个绿色汽车具体工厂类和绿色汽车类就可以。而不用像简单工厂模式中那样去修改工厂类中的实现(具体指添加case语句)。