2013年5月16日 星期四

設計模式:簡單工廠模式 (Simple Factory Pattern)

簡單工廠模式 (Simple Factory Pattern),以下程式碼以 C# 為例

說明:
使用 class 的靜態方法,依不同條件,取得不同物件,並用取得的物件,做類似的事情。
缺點是要新增不同條件時,須修改到類別的靜態方法。

範例:
生產玩具車、玩具狗。


希望達成如下的效果
static void Main(string[] args)
{
    Toy aa;
    aa = ToyFactory.CreateToy("car");
    aa.MakeToy();//製造了 玩具車

    aa = ToyFactory.CreateToy("dog");
    aa.MakeToy();//製造了 玩具狗

    Console.ReadLine();
}
執行結果:
製造了 玩具車
製造了 玩具狗



實現重點在於,將不同條件給靜態方法後(ToyFactory.CreateToy),靜態方法能回傳同類型的物件。

其餘程式碼
abstract class Toy
{
    public abstract void MakeToy();
}

class ToyCar : Toy
{
    public override void MakeToy()
    {
        Console.WriteLine("製造了 玩具車");
    }
}

class ToyDog : Toy
{
    public override void MakeToy()
    {
        Console.WriteLine("製造了 玩具狗");
    }
}

class ToyFactory
{
    public static Toy CreateToy(String cc)
    {
        Toy obj = null;
        switch (cc)
        {
            case "car":
                obj = new ToyCar();
                break;
            case "dog":
                obj = new ToyDog();
                break;
            default:
                throw new Exception("沒有這個類別");

        }
        return obj;
    }
}

相關連結:設計模式整理列表

3 則留言:

  1. 跟策略模式好像,只是策略模式是把整個class傳進去,簡單工廠是依照傳入參數才決定要用哪個class,
    但除了這樣還有區別嗎? 我感覺還沒體會到這兩種策略模式的精隨QQ

    回覆刪除
    回覆
    1. 若要新增一個class,
      簡單工廠模式,除了新增新的class外,還須修改用來判斷的那個class ToyFactory,
      策略模式,只須新增新的class,策略模式的優點,不須動到原本的類別。

      刪除
    2. 恩恩了解了! 感謝回復

      刪除