名稱 | Factory Method |
結構 | |
意圖 | 定義一個用于創建對象的接口,讓子類決定實例化哪一個類。Factory Method 使一個類的實例化延遲到其子類。 |
適用性 | - 當一個類不知道它所必須創建的對象的類的時候。
- 當一個類希望由它的子類來指定它所創建的對象的時候。
- 當類將創建對象的職責委托給多個幫助子類中的某一個,并且你希望將哪一個幫助子類是代理者這一信息局部化的時候。
|
|
|

namespace FactoryMethod
{
public abstract class LightFactory
{
public abstract Light CreateLight();
}
public class BulbLightFactory : LightFactory
{
public override Light CreateLight()
{
return new BulbLight();
}
}
public class TubeLightFactory : LightFactory
{
public override Light CreateLight()
{
return new TubeLight();
}
}
}
namespace FactoryMethod
{
public abstract class Light
{
public abstract void TurnOn();
public abstract void TurnOff();
}
public class BulbLight : Light
{
public override void TurnOn()
{
Console.WriteLine("Bulb Ligh is Turned on.\n");
}
public override void TurnOff()
{
Console.WriteLine("Bulb Ligh is Turned off.\n");
}
}
public class TubeLight : Light
{
public override void TurnOn()
{
Console.WriteLine("Tube Ligh is Turned on.\n");
}
public override void TurnOff()
{
Console.WriteLine("Tube Ligh is Turned off.\n");
}
}
}
namespace FactoryMethod
{
public class Client
{
public static void Main()
{
LightFactory BulbFactory = new BulbLightFactory();
LightFactory TubeFactory = new TubeLightFactory();
Light l1 = BulbFactory.CreateLight();
Light l2 = TubeFactory.CreateLight();
l1.TurnOn();
l1.TurnOff();
Console.WriteLine("===============\n");
l2.TurnOn();
l2.TurnOff();
}
}
}