#簡單工廠模式
##活字印刷 面向對象
話說三國時期,曹操帶領百萬大軍攻打東吳,大軍在長江赤壁駐扎,軍船連成一片,眼看就要滅掉東吳,統一天下,曹操大悅,于是大宴眾文武,在酒席間,曹操詩興大發,不覺吟道:喝酒唱歌,人生真爽。眾文武齊呼:“丞相好詩!于是一臣子速命印刷工匠刻板印刷,以便流傳天下。”
樣張出來給曹操一看,曹操感覺不妥,說到:“喝與唱,此話過俗,應該為‘對酒當歌’較好!”,于是此臣就命工匠重新來過。工匠眼看連夜刻板之工,徹底白費,心中叫苦不迭。只得照辦。”
樣張再次出來請曹操過目,曹操細細一品,感覺還是不好,說:“人生真爽太過直接,應改問語才夠意境,因此應改為‘對酒當歌,人生幾何?’當臣子轉告工匠之時,工匠暈倒!”
為何三國時期的工匠有如此的問題?
當時活字印刷還未發明,所以要改字的時候必須要整個刻板重刻。如果有活字印刷,則只需更改四個字就可,其余工作都未白做,豈不妙哉。
* 要改,只需要更改之字,此為可維護。
* 這寫字并非用完這次就無用,完全可以在后來的印刷中重復使用,此乃可復用。
* 此詩若要加字,只需另刻字加入即可,這是可擴展。
* 字的排列其實可能是豎排也可能是橫排,此時只需要將活字移動就可以做到滿足排列需求,此是靈活性好
面對對象的分析設計編程思想,通過封裝,繼承多態把程序的耦合度降低,傳統印刷術的問題就在于所有的字都刻在同一版面上造成耦合度太高所致,開始用設計模式使得程序更加靈活,易于修改,易于復用。
##簡單工廠模式
例:計算器,到底要實例化誰,將來會不會增加實例化的對象,把很容易變化的地方用一個單獨的類來做這個創造實例的過程,這個就是工廠。
簡單的運算工廠類
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 OperationMul();
break;
case "/":
oper = new OperationDiv();
break;
}
return oper;
}
}
客戶端代碼
Operation oper;
oper = OperationFactory.createOperate("+");
oper.NumberA = 1;
oper.NumberB = 2;
double result = oper.GetResult();
這樣,以后需要增加各種復雜運算,比如平方根,立方根,自然對數等等,只要增加相對應的運算子類就可以了。