說明:
抽象工廠類別,可返回同類型的工廠。這些返回的工廠,有多個相同的方法,做類似的事。
範例:
有 A、B 兩個品牌,都有生產 玩具車、玩具狗 這兩個商品。
當然 A、B 品牌生產出來的 玩具車、玩具狗,是不一樣的。
希望達成如下的效果
static void Main(string[] args)
{
AbstractFactory xx; // 抽像工廠
ToyCar Car; // 製造玩具車的工廠
ToyDog Dog; // 製造玩具狗的工廠
// A 品牌
xx = new Factory_A();
Car = xx.CreateToyCar();
Dog = xx.CreateToyDog();
Car.MakeToyCar();
Dog.MakeToyDog();
Console.WriteLine("----------");
// B 品牌
xx = new Factory_B();
Car = xx.CreateToyCar();
Dog = xx.CreateToyDog();
Car.MakeToyCar();
Dog.MakeToyDog();
Console.ReadLine();
}
執行結果: A 品牌 製造的 玩具車
A 品牌 製造的 玩具狗
----------
B 品牌 製造的 玩具車
B 品牌 製造的 玩具狗
實現重點在於,利用抽像工廠類別,回傳實際生產的工廠物件。
其餘程式碼
//生產玩具車的抽像類別
abstract class ToyCar
{
public abstract void MakeToyCar();
}
//生產玩具狗的抽像類別
abstract class ToyDog
{
public abstract void MakeToyDog();
}
//A 品牌玩具車
class ToyCar_A : ToyCar
{
public override void MakeToyCar()
{
Console.WriteLine("A 品牌 製造的 玩具車");
}
}
//A 品牌玩具狗
class ToyDog_A : ToyDog
{
public override void MakeToyDog()
{
Console.WriteLine("A 品牌 製造的 玩具狗");
}
}
//B 品牌玩具車
class ToyCar_B : ToyCar
{
public override void MakeToyCar()
{
Console.WriteLine("B 品牌 製造的 玩具車");
}
}
//B 品牌玩具狗
class ToyDog_B : ToyDog
{
public override void MakeToyDog()
{
Console.WriteLine("B 品牌 製造的 玩具狗");
}
}
// 抽象工廠
interface AbstractFactory
{
ToyCar CreateToyCar();
ToyDog CreateToyDog();
}
// 回傳 A 品牌,實做的物件
class Factory_A : AbstractFactory
{
public ToyCar CreateToyCar()
{
return new ToyCar_A();
}
public ToyDog CreateToyDog()
{
return new ToyDog_A();
}
}
// 回傳 B 品牌,實做的物件
class Factory_B : AbstractFactory
{
public ToyCar CreateToyCar()
{
return new ToyCar_B();
}
public ToyDog CreateToyDog()
{
return new ToyDog_B();
}
}
相關連結:設計模式整理列表
沒有留言:
張貼留言