第2章 無名特質(The quality without a name) 存在著一個極為重要的特質,它是人、城市、建築或荒野的生命與精神的根本準則。這種特質客觀明確,但卻無法命名。 這讓我想起了獨孤求敗之“手中無劍,心中有劍”,何其的相似。看著郵差機械式地往信箱裡投郵件,看著田間老農“空中接力”傳運西瓜,我也留意到了這種特質,但確實不好命名,因為一旦執行個體化,就會限定死了若干條件,而沒有“生氣”了。 WOW,終於發現抽象類別存在的價值了。
GOF的定義:給定一個語言,定義它的文法的一種表示,並定義一個解譯器,這個解譯器使用該表示來解釋語言中的句子。這個模式很少用到,我看過一個機器人指令的實現,使用了該模式。兩個子類的實現,TernimalExpression類是具體做事情的類;NonternimalExpression類是一個容器,它的interpret方法,負責遍曆其內部的所有TernimalExpression對象:Code highlighting produced by Actipro CodeHighlighter
狀態模式是把各種狀態封裝成不同的類。關於Context類的實現,不太同於Strategy,雖然原理是一樣的: public class Context { private State stateA, stateB, state; public Context() { stateA = new StateA(); stateB = new StateB(); } publi
在建立一個新的工作流程時,需要做出一項重要的抉擇:我們要建立的工作流程究竟是一個順序工作流程,還是一個狀態機器工作流程?WF提供了兩種“即開即用的”(out of the box)工作流程執行類型。為了回答這個問題,我們不得不決定誰在受控。 順序工作流程是一種預知的工作流程。執行路徑可能是分支、迴圈、或等待一個外來事件的發生,但是最終順序工作流程將會使用活動、條件和我們在前面章節所提供的必不可少的匹配規則。工作流程在進程中受控。
這個模式是對模板方法的簡單封裝,可以看到,只是多了一個Context類這個封裝器。以上UML圖的代碼很好實現,關鍵是Client如何使用Context類: Strategy s = new ConcreteStrategyA(); Context context = new Context(); context.Strategy = s; context.ContextInterface();用戶端必須知道所
模板方法很簡單,只要有抽象類別的地方,都可以看到這個模式:就是在父類中的非抽象方法中調用抽象方法。基於委託的模板方法:從而具體實現方法可以不依賴於抽象類別,達到解耦的目的幾點注意: 1.delegate聲明在模板類中 2.在類DoCompA和DoCompB中定義與委託相同的方法 3.在Main()中組裝委託鏈,調用tm.DoComp()意味著這是一個模板方法(非抽象中方法調用抽象方法) public class TemplateMethod { pub