Saturday, November 26, 2011

Design Pattern Note-Simple Factory

簡單工廠模式:




1.單獨的類別來做創造實體過程

UML:
第一層:Class 名稱,斜線代表Abstract
第二層:類別欄位和property
第三層:Method 和Behave ,"+" 代表public "-" private "#" protected


一個簡單工廠(Simple Factor or Static Factor),簡單來說就是用來生產”類別”(Class)的工廠。
以計算機為例:
1.我們不可能會用一個類別來表示全部計算的功能。

2.程式碼必須要是容易擴展與維護! -降低偶合度,所以必須要把顯示功能和計算功能分開。

3.物件實體化的時機,可以用簡單工廠模式處理。

先創造一個 Operation Class
public class Operation
{
    private double numberA = 0;
    private double numberB = 0;

    public double NumberA
    {
       get{return numberA;}
       set{return numberA = value;}
    }

    public double NumberB
    {
       get{return numberB;}
       set{return numberB = value;}
    }

    public virtual double GetResult()
    {
       double result =0;
       return result;
    }
}
 
這是
 
virtual:當Operation 被繼承時,需要override GetResult Method的結果,不知道原因可去MSDN查詢
 
 
接著必須實作出 加減乘除運算
class OperationAdd: Operation
{
    public override double GetResult()
    {
        double result = 0;
        result = NumberA + NumberB;
        return result
    }
}
class OperationAdd: Operation
{
    public override double GetResult()
    {
        double result = 0;
        result = NumberA - NumberB;
        return result
    }
}
…省略
把所有運算分開類同時可避免不當的修改。
接著要實作工廠模式:
public class OperationFactory
{
   public static Operation createOperate(string operate)
   {
   Operation oper = null;
   switch (operate)
   {
       case "+" :
         oper = new OperationAdd();
         break;
       case "-" :
         oper = new OperationSub();
         break;
       case "*" :
         oper = new OperationMutiply();
         break;
       case "/" :
         oper = new OperationDiv();
         break;
    }
    return oper;
    }
}
 
實體化運算類別,同時在不需要的時候回歸成null,如果有要新增運算類別,可以只需要在 OperationFactory增加swich的分支和產生運算類類別,不會影響到既有類別的運算邏輯,讓程式碼有更多的擴充性。
 
 
接下來實作客戶端介面
 
Operation oper;
oper = OperationFactory.createOperate("+");
oper.NumberA = 1;
oper.NumberB = 2;
double result = oper.GetResult();
 
同時我們可以只讓客戶端輸入property,工廠實體化適合的條件,再透過多型,傳回到父類別的方式實現計算機的功能
簡單工廠只實體化運算類別,因此當運算邏輯有Bug時,只需要去檢查運算邏輯,同時可以降低耦合度,進而容易擴展和維護。
 
降低耦合度
容易擴展和維護
容易重複使用
是我們寫程式的目標!!!!!! 

No comments:

Post a Comment