工厂方法(Factory Method)模式就是定义一个创建对象的工厂接口,将实际创建工作推迟到子类当中。
核心工厂类不再负责具体产品的创建,仅提供了具体工厂子类必须实现的接口,这样核心类成为一个抽象工厂角色,这样做的好处是工厂方法模式可以使系统在不修改具体工厂角色的情况下进行引进新的产品。
在Factory Method模式中,工厂类与产品类往往具有平行的等级结构,它们之间一一对应。
从上图可以看出,工厂方法模式有四个角色:
具体实现代码如下:
public interface ICreator
{
ILight Factory();
}
public interface ILight
{
void TurnOn();
void TurnOff();
}
public class TubeLight : ILight
{
public void TurnOn()
{
Console.WriteLine("TubeLight TurnOn");
}
public void TurnOff()
{
Console.WriteLine("TubeLight TurnOff");
}
}
public class BulbLight : ILight
{
public void TurnOn()
{
Console.WriteLine("BulbLight TurnOn");
}
public void TurnOff()
{
Console.WriteLine("BulbLight TurnOff");
}
}
public class BulbCreator : ICreator
{
public ILight Factory()
{
return new BulbLight();
}
}
public class TubeCreator : ICreator
{
public ILight Factory()
{
return new TubeLight();
}
}
public class Test
{
public static void Main()
{
ICreator create1 = new BulbCreator();
ILight light = create1.Factory();
light.TurnOn();
light.TurnOff();
create1 = new TubeCreator();
light = create1.Factory();
light.TurnOn();
light.TurnOff();
}
}
工厂方法模式与简单工厂模式在结构上区别是:工厂方法类的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具体类上。
工厂方法模式的具体工厂类都有一个共同的接口,所以工厂方法模式也叫多态性工厂模式。
当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体对象以及一个具体工厂对象,原有工厂对象不需要进行任何修改,很好的符合了“开放封闭“原则。而简单工厂模式在添加新产品对象后不得不修改工厂方法,扩展性不好。
工厂方法模式退化后可以演变成简单工厂模式。
设计模式之六:工厂方法模式(Factory method Pattern)
原文:http://www.cnblogs.com/mamxfx/p/7148105.html