《Head First 設計模式》隨手筆記
策略模式定義:定義了算法族,分別封裝起來,讓他們之間可以相互替換,此模式讓算法的變化獨立于使用算法的客戶。
舉個例子:
Duck這個超類下面可以有以下品種的鴨子
? ? 紅頭鴨
? ? 綠頭鴨
? ? 橡皮鴨
? ? 木頭鴨
而這些鴨子都有自己的行為特征,像是
? ? 飛翔
? ? 叫喊
但是因為不同的鴨子有著不同的行為特征,所有可以把這些行為特征從“Duck”中分離出來,像是
? ? 紅頭鴨
? ? ? ? 會飛
? ? ? ? 會嘎嘎叫
? ? 綠頭鴨
? ? ? ? 會飛
? ? ? ? 會嘎嘎叫
? ? 橡皮鴨
? ? ? ? 不會飛
? ? ? ? 會吱吱叫
? ? 木頭鴨
? ? ? ? 不會飛
? ? ? ? 不會叫
這個時候我們不能單單只靠在Duck中描述的方法來行動了,因為Duck中的方法描述只是行為特定的一種而已。
所以我們可以創(chuàng)建一個飛翔的特征接口FlyBehavior,其下有FlyWithWings和FlyNoWay類,以描述會飛和不會飛行為。
同理,創(chuàng)建一個QuackBehavior接口,其下有Quack/Squeak/MuteQuack。
就是這樣,把個體的特征有策略地分成幾個描述的方法或者類,以達到類或接口的可復用/可擴充/可維護三個目的。
也就是說,策略模式就像是對一個事物進行分析細化一樣。
一個人,按膚色來說有黑黃白三種
一個人的行為,按通俗講有吃喝玩樂拉撒六種
而吃喝玩樂拉撒對應怎么吃怎么喝等的六種行為里面,又是比較籠統(tǒng)的說法,所以需要細化
吃 是大快朵頤的那種吃,還是細嚼慢咽的那種吃
喝 是“吹一支!”的那種喝,還是“要讓酒包裹住你的舌頭并讓味蕾聞到那種芳香”的那種喝
玩 是驚險刺激的蹦極深潛滑翔,還是連連看消消樂斗地主
樂 是因為外界刺激的歡樂,還是由內向外的喜悅
至于拉撒,我就不寫下去了,大家自行想象
總結一下,策略模式就是“定義了算法族,分別封裝起來,讓他們之間可以相互替換,此模式讓算法的變化獨立于使用算法的客戶”(沒錯就是上文的定義,定義已經很清楚的表達出了策略模式是什么了,在這里就不獻丑了)。