1. 模式意图
简单工厂根据提供给它的数据,返回可能类中的一个类的实例。通常它返回的类都有一个公共的父类和公共的方法。
(简单工厂实际上不是GoF设计模式中的一个)
工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任,而仅仅是消费对象。
但系统扩展困难,一旦添加新产品就不得不修改工厂逻辑。
2. 模式定义
工厂类(LightSimpleFactory):工厂类在客户端的直接控制下(Create方法)创建产品对象;
抽象产品(Light):定义简单工厂创建的对象的父类或它们共同拥有的接口;可以是一个类、抽象类或接口;
具体产品(BulbLight,TubeLight):定义工厂具体加工出的对象;
3. 模式实现
3.1 C#实现
using System;
public abstract class Light
{
public abstract void TurnOn();
public abstract void TurnOff();
}
public class BulbLight : Light
{
public override void TurnOn()
{
Console.WriteLine("Bulb Light is Turned on");
}
public override void TurnOff()
{
Console.WriteLine("Bulb Light is Turned off");
}
}
public class TubeLight : Light
{
public override void TurnOn()
{
Console.WriteLine("Tube Light is Turned on");
}
public override void TurnOff()
{
Console.WriteLine("Tube Light is Turned off");
}
}
public class LightSimpleFactory
{
public Light Create(string LightType)
{
if(LightType == "Bulb")
return new BulbLight();
else if(LightType == "Tube")
return new TubeLight();
else
return null;
}
}
public class Client
{
public static void Main()
{
LightSimpleFactory lsf = new LightSimpleFactory();
Light l = lsf.Create("Bulb");
l.TurnOn();
l.TurnOff();
Console.WriteLine("-----------------");
l = lsf.Create("Tube");
l.TurnOn();
l.TurnOff();
}
}
4. 模式应用
4.1 3D引擎创建不同的render
Simple Factory:RenderFactory
Abstract Product: Render
Concrete Products:OpenGLRender, D3DRender