[Design Pattern] 簡單工廠(Simple Factory)
簡單工廠模式(Simply Factory),又名靜態工廠方法(static Factory Method),是由一個工廠類別根據參數來決定要用哪一種方式來實作。
使用簡單工廠模型的好處是可以把各方法進行封裝,當我們有新的或是需要修改舊的類別時,不會去異動到其它類別~
例如:百貨公司在不同的銷售期間商品會進行折扣,我們可以依照購買日期來決定商品有多少折扣;雖然簡單的if else可以辦到,但是當折扣方式增加、或是有不同的計算方式出現時會變得難以維護,所以可以先用簡單工廠模式把他分解出來。
我們把每個計算的方式都設計成一個類別,然後由工廠依據輸入的日期區間決定要使用哪個方法類別實作他~
**以下程式完全沒防呆…
{
/// <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 的標籤:Design Pattern