工厂方法模式的介绍
在简单工厂模式中讲到简单工厂模式的缺点,有一点是——简单工厂模式系统难以扩展,一旦添加新产品就不得不修改简单工厂方法,这样就会造成简单工厂的实现逻辑过于复杂,工厂方法模式可以解决简单工厂模式中存在的这个问题,下面就具体看看工厂模式是如何解决该问题的。
工厂方法模式之所以可以解决简单工厂的模式,是因为它的实现把具体产品的创建推迟到子类中,此时工厂类不再负责所有产品的创建,而只是给出具体工厂必须实现的接口,这样工厂方法模式就可以允许系统不修改工厂类逻辑的情况下来添加新产品,这样也就克服了简单工厂模式中缺点。
工厂方法模式UML图
工厂方法模式的实现
Food.cs:
using System;
namespace DesignModelDemo.FactoryFunction
{
abstract class Food
{
public abstract void Print();
}
}
PotatoFood.cs:
using System;
namespace DesignModelDemo.FactoryFunction
{
class PotatoFood:Food
{
public override void Print()
{
Console.WriteLine("炒好了一盘土豆丝...");
}
}
}
TomatoFood.cs:
using System;
namespace DesignModelDemo.FactoryFunction
{
class TomatoFood : Food
{
public override void Print()
{
Console.WriteLine("炒好一盘西红柿...");
}
}
}
FoodFactory.cs:
using System;
namespace DesignModelDemo.FactoryFunction
{
abstract class FoodFactory
{
public abstract Food CreatFood();
}
}
PotatoFoodFactory.cs:
using System;
namespace DesignModelDemo.FactoryFunction
{
class PotatoFoodFactory:FoodFactory
{
public override Food CreatFood()
{
return new PotatoFood();
}
}
}
TomatoFoodFactory.cs:
using System;
namespace DesignModelDemo.FactoryFunction
{
class TomatoFoodFactory:FoodFactory
{
public override Food CreatFood()
{
return new TomatoFood();
}
}
}
Customer.cs:
using System;
namespace DesignModelDemo.FactoryFunction
{
class Customer
{
static void Main(string[] args)
{
//炒一盘西红柿
FoodFactory foodFactory = new TomatoFoodFactory();
foodFactory.CreatFood().Print();
//炒一盘土豆丝
FoodFactory foodFactory2 = new PotatoFoodFactory();
foodFactory2.CreatFood().Print();
Console.Read();
}
}
}