我已經看過this explanation on Wikipedia,特別是C++示例,並且沒有認識到僅僅定義3個類,創建實例並調用它們之間的區別,以及該示例。我所看到的僅僅是將兩個其他課程放在這個過程中,並且看不到哪裏會有好處。現在我確信我錯過了一些明顯的東西(樹木) - 有人可以用一個明確的現實世界的例子來解釋它嗎?使用戰略模式的好處在哪裏?
我可以從這麼遠的答案做什麼,在我看來是隻是這樣做的更加複雜的方式:
have an abstract class: MoveAlong with a virtual method: DoIt()
have class Car inherit from MoveAlong,
implementing DoIt() { ..start-car-and-drive..}
have class HorseCart inherit from MoveAlong,
implementing DoIt() { ..hit-horse..}
have class Bicycle inherit from MoveAlong,
implementing DoIt() { ..pedal..}
now I can call any function taking MoveAlong as parm
passing any of the three classes and call DoIt
Isn't this what Strategy intents? (just simpler?)
[編輯更新] 我指的是功能上面被替換爲另一個類,其中MoveAlong將成爲根據需要設置的屬性,基於在這個新類中實現的算法。 (什麼是證明接受的答案類似。)
[編輯更新] 結論
策略模式有它的用途,但我在吻一個強有力的信徒,會傾向於更直接,更不困惑的技術。大多數情況下,因爲我想傳遞易於維護的代碼(並且'我最有可能是必須進行更改的人員!)。
「是不是這是什麼策略的意圖?(只是更簡單?)「< - - 除了你給你的類的引用,讓其他類在需要的時候調用它,而另一個類只知道它有一個MoveAlong。這是在團隊中更有用的其中一種。 – Gerald 2008-10-05 10:52:30
嗨傑拉爾德我認爲你的例子是一個戰略模式的壞榜樣。是的,它是一種戰略,但在你的情況下,有比實施戰略模式更好的子類。我相當肯定火星時鐘會有不同於地球時鐘的行爲,因此它值得繼承時鐘類。 – RWendi 2008-11-27 04:26:53
大聲笑...我剛看到這個評論。我想,如果你期望在火星上有客戶,那麼在你的設計中可能值得擔心火星鍾。但是由於100%的大多數人的客戶將成爲地球上的人類,並且具有世界時間數據表示,所以我認爲忽略這種邊緣情況是相當安全的,除非是視頻遊戲。 – Gerald 2009-06-05 14:44:30