淺析設計模式之策略模式—:為什么總是繼承[2] uml模型
關鍵字:uml
重復的代碼確實減少了很多,但是還有一些重復(心里在默默的罵道:TMD,為什么C#不支持多繼承,不然我就可以消除重復了),也許你還在自我陶醉的欣賞著自己多么完美的類繼承層次,在那里感慨OO的強大。但是隨著具體的高校越來越多,而且有的高校的報到步驟居然要發生改變,你小心的在中間那一層添加新的類,并將一些高校的實現轉移,每一次你都非常小心(這個系統正在高速的運轉,每改錯一步,就有多少莘莘學子入不了學)。你心里終于對OO不滿起來:為什么,為什么大家都說OO是救世主,但是卻救不了我。答案是因為你將OO的設計原則遺忘在課本里了。開閉原則、優先使用組合,你還記得嗎?
在我們很多OO程序員的腦子里總是存在這樣一個觀念:沒有繼承的程序不是OO的程序,看到重復總是想到繼承。當初我也是這樣想的,有的時候看到自己畫的龐大的繼承類圖,心里在樂呵呵的笑?衫^承總是不給面子,一個小小的變化就將這個看似穩定的體系弄的支離破碎。
還是回到我們的例子,在這個例子中變化的是各高校的報到步驟,本著發現變化、封裝變化、隔離變化的原則我們將報到的步驟分離出來,獨立成類。
這樣我們就可以復用這些步驟了,有新的步驟實現只要添加更多的子類,并不需要修改原來的代碼。(作業:在繼續閱讀之前根據上面的類圖自己寫出實現的代碼來)這就是所謂的策略設計模式:策略模式定義了算法族,分別封裝起來,讓它們之間可以互相替換,此模式讓算法的變化獨立于算法的客戶(DP)。
策略模式有三種參與者:
一、 Context 這個類保存了對策略的引用,并且調用實際的策略實現,有可能還提供一個接口,讓策略可以訪問它內部的數據,在這里就是我們的“高!鳖。
文章來源于領測軟件測試網 http://www.kjueaiud.com/