工厂方法模式 FactoryMethod
工厂方法:定义一个用于创建对象的接口,让子类决定将哪一个类实例化。Factory Method使一个类的实例化延迟到其子类。
工厂方法解决了简单工厂模式难以扩展的问题。
把简单工厂类分解为抽象基类和若干个具体类如下代码:
//抽象的工厂方法“总部”类FactoryMethod
public abstract class FactoryMethod
{
public abstract Food Creator(); //抽象的工厂方法Creator返回目标Food对象
}
//原来的分工厂 具体子类TomatoesFactory
public class TomatoesFactory : FactoryMethod
{
//实现功能的具体的工厂方法Creator
public override Food Creator()
{
return new Tomatoes(); //返回new出的具体对象
}
}
//新增的分工厂 具体子类PotatoesFactory
public class PotatoesFactory : FactoryMethod
{
public override Food Creator()
{
return new Potatoes();
}
}
//需求 抽象类Food
public abstract class Food
{
public abstract void Print();
}
//原来的需求 具体类Tomatoes
public class Tomatoes : Food
{
public override void Print()
{
Console.WriteLine("番茄炒蛋!");
}
}
//新增的需求 具体类Potatoes
public class Potatoes : Food
{
public override void Print()
{
Console.WriteLine("土豆肉丝!");
}
}
//程序调用入口(Main方法)
class Program
{
static void Main(string[] args)
{
//原来的需求
FactoryMethod tomatoesFactory = new TomatoesFactory();
tomatoesFactory.Creator().Print();
//新增的需求
FactoryMethod potatoesFactory = new PotatoesFactory();
potatoesFactory.Creator().Print();
Console.ReadKey();
}
}
如果需要添加新功能/产品时,我们可以利用多态性来轻松完成扩展。
在工厂方法模式中,工厂类与具体产品类具有平行的等级结构,它们之间是一一对应的。
也就是说,增加功能时要“成对”增加。
注意:工厂方法模式中每个具体工厂类只完成单个实例的创建,如果要实现工厂多元化(一个工厂生产多个实例),就要用到抽象工厂模式。