深入淺出設計模式讀後心得_策略模式

  • 2513
  • 0
  • 2010-10-19

摘要:深入淺出讀後心得_策略模式

首先來談談最令我印象深刻的鴨子範例吧...

故事的大綱是某人設計了模擬鴨子的程式,整理出以Duck為超類別,然後其它種類的鴨子再繼承這個超類別去實作

但是...

使用繼承→不好,一旦需求變更,就要改很多地方,而且很可能漏改或改錯
使用介面→不好,各別實作導致同樣的Code無法重覆利用

在這裡提到了第一個設計原則:獨立可能變化的地方,不要和其它不需要變化的混在一起

於是採用了...封裝→將可能變化的東西設計成一個類別

第二個設計原則:針對介面寫程式,而不要針對實現寫程式

第三個設計原則:多用組合,少用繼承

不過老實說,其實一開始會對這個範例印象深刻是因為這個範例有繼承、介面的應用
對於當時還懵懵懂懂的我來說,這個範例給我最大的印象是告訴了我怎麼使用這些東西
所以那時候其實根本就看不懂這個範例主要想告訴我的是這些設計原則以及Don't repeat yourself...

看不懂的結果也導致我後來有一段時間一直都在用繼承寫程式,然後重覆寫一大堆的相同邏輯
一旦需求變更就是用"尋找"的功能開始一個個看,改一改還很容易出錯...Orz

附上Sample Code:Strategy Pattern Sample.rar
不是鴨子,而是後面的遊戲角色練習題,一開始幫讀者設計了Character這個類別:



和WeaponBehavior這個Interface:



還有角色和武器種類,像是騎士:

還有巨人:



 武器像是小刀:



和劍:



這樣一來角色和所拿的武器都可以變動,而角色在使用武器時可以呼叫一樣的方法(fight)卻表現出不同的行為,像是騎士只用了武器一次,巨人可以連續使用兩次;而各武器使用的時候也可以透過實作UseWeapon這個方法來達到使用上會呈現的不同結果。

加油添醋的做完了才發現:原來我好像只是"看"懂了,但實際上還是要透過實作才能明確的知道哪邊的觀念還很薄弱...囧