您的位置:首页 > 其它

模式一(简单工厂)

2010-08-10 22:33 288 查看
根据提供给它的数据,返回几个可能类中的一个实例,通常返回的类是公共的父类,公共的方法或接口。



工厂类角色:工厂类在客户端的直接控制下创建产品对象

抽象产品角色:定义简单工厂创建的对象的父类或它们共同拥有的接口,可以是一个类,抽象类或接口。

具体产品角色:定义工厂具体加工出的对象。

using System;
using System.Collections.Generic;
using System.Text;

namespace Simple_Factory
{
/// <summary>
/// 抽象类
/// </summary>
public abstract class Light
{
public abstract void TurnOn();
public abstract void TurnOff();
}

/// <summary>
/// 实体类1
/// </summary>
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");
}
}

/// <summary>
/// 实体类2
/// </summary>
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");
}
}

/// <summary>
/// 工厂类
/// </summary>
public class LightSimpleFactory
{
public Light Create(string LightType)
{
switch(LightType)
{
case "Bulb": return new BulbLight();
case "Tube": return new TubeLight();
default: return null;
}
}
}

/// <summary>
/// 客户端
/// </summary>
class Program
{
static void Main(string[] args)
{
LightSimpleFactory lsf = new LightSimpleFactory();
Light l = lsf.Create("Bulb");
l.TurnOn();
l.TurnOff();
}
}
}

模式演化:

将工厂放在抽象产品中

using System;
using System.Collections.Generic;
using System.Text;

namespace Simple_Factory
{
public class Light
{
public virtual void TurnOn(){}

public virtual void TurnOff() {}

public static Light Create(string LightType)
{
switch(LightType)
{
case "Bulb": return new BulbLight();
case "Tube": return new TubeLight();
default: return null;
}
}
}

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");
}
}

class Simple_Factory2
{
public static void Main()
{
Light l = Light.Create("Bulb");
l.TurnOn();
l.TurnOff();
}
}
}

优点:

工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任。

缺点:

不利于扩展,如果需要添加产品就不得不修改工厂逻辑。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: