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