您的位置:首页 > 其它

【设计模式基础】创建型模式 - 3 - 简单工厂(Simple Factory)

2013-12-31 23:55 621 查看

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: