[Design Pattern] 簡單工廠(Simple Factory)

[Design Pattern] 簡單工廠(Simple Factory)

簡單工廠模式(Simply Factory),又名靜態工廠方法(static Factory Method),是由一個工廠類別根據參數來決定要用哪一種方式來實作。

使用簡單工廠模型的好處是可以把各方法進行封裝,當我們有新的或是需要修改舊的類別時,不會去異動到其它類別~

 

例如:百貨公司在不同的銷售期間商品會進行折扣,我們可以依照購買日期來決定商品有多少折扣;雖然簡單的if else可以辦到,但是當折扣方式增加、或是有不同的計算方式出現時會變得難以維護,所以可以先用簡單工廠模式把他分解出來。

 

我們把每個計算的方式都設計成一個類別,然後由工廠依據輸入的日期區間決定要使用哪個方法類別實作他~

image

**以下程式完全沒防呆…


{
    /// <summary>
    /// 計算應付金額
    /// </summary>
    /// <param name="money"></param>
    /// <returns></returns>
    public abstract decimal Count(int money);
}

 


/// 正品期間計價
/// </summary>
class GeneralCalulator : Calculator
{
    public override decimal Count(int money)
    {
        return money;
    }
}

 


/// 折扣期間計價
/// </summary>
class SaleCalulator : Calculator
{

    public override decimal Count(int money)
    {
        return Convert.ToDecimal(money * 0.8);
    }
}

 


/// 計算金額工廠
/// </summary>
class CalculatorFactory
{

    public static Calculator CreateCalculator(DateTime dt)
    {

        Calculator c = null;
        switch (dt.Month)
        {
            case 7:
            case 8:
            case 9:
                c = new SaleCalulator();
                break;
            default:
                c = new GeneralCalulator();
                break;
        }

        return c;
    }
}

 


{
    Console.Write("請輸入日期:");
    string date = Console.ReadLine();
    Console.Write("請輸入金額:");
    string money  = Console.ReadLine();

    Calculator c = CalculatorFactory.CreateCalculator(Convert.ToDateTime(date));
    Console.WriteLine("應付金額:" + c.Count(Convert.ToInt32(money)));
    Console.ReadKey();
}

 

Dotblogs 的標籤: