1. 程式人生 > >Head First 設計模式讀書筆記——策略模式

Head First 設計模式讀書筆記——策略模式

最近研究了一些優秀的開源框架,學習了很多開源框架中自己不熟悉的知識,發現一些優秀的開源框架都或多或少的使用了設計模式,正好為了能分析原始碼不那麼頭疼乾脆先複習一下以前只看過的設計模式,於是我翻出了壓箱底的head first 設計模式,這本書圖文並茂,就是廢話很多不過它完全順著你的思考一步一步走下去講解,用清晰的例子演變告訴你為什麼要這麼做,講的很好。為了防止以後忘記,就邊看邊記錄,加深印象。

場景:

現在我們需要設計一個模擬鴨子的遊戲,鴨子會游泳會叫以及他們有不同的外觀你可能會設計出以下結構。

這樣我們將鴨子共有的游泳與叫放在基類,而將可變化的外觀抽離出來,這樣的設計是沒有問題的,但是遊戲上線之後,我們的遊戲中要新增一個可達鴨類,但是可達鴨是不會飛的,這下我們的結構就不能在適用了。

思考:

如果繼續用這個結構,新增一個不會飛不會叫的鴨子就覆蓋子類的方法,內部不做實現,這樣雖然可以但是會增加大量重複程式碼,而且難於維護。如果使用介面呢?道理也是一樣的。

設計原則:

找出應用中可能需要變化之處,把他們獨立出來,不要和那些不需要變化的程式碼混在一起。

針對介面程式設計,而不是針對實現程式設計

多用組合,少用繼承

那麼我們可以把鴨子的行為從鴨子類中抽出來,將行為利用介面來表示,但這次我們不去讓鴨子的子類來實現行為介面,因為這樣子類的行為就會被繫結在子類中,這樣太依賴”子類實現“,因此這次鴨子的子類將去使用介面所表示的行為,不會再去實現它。這次我們更改一下實現結構:

策略模式

定義了演算法族,分別封裝起來,讓他們之前可以互相替換,此模式讓演算法的變化獨立於使用演算法的客戶

程式碼實現

點選這裡