Introduction 簡介
-
應先了解 OO 的 SOLID 為何?
-
繼承 → 介面
-
繼承的缺點:
- code 在子類別重複
- 執行時行為不易改變
- 難以得知所有物件的全部行為
- 改變會,牽一髮而動全身
-
常用 設計守則
- favor object composition over class inheritance
- 原因:請看第3點的繼承缺點
- 會變動的部分 → 封裝
- 找出程式中可能需要更動之處,把他們獨立出來
- 不要和那些不需要更動的程式碼混在一起
- programming to an interface, not an implementation
- code 針對 supertype 而寫
- supertype:interface, abstract class
- 動態的設定行為 → setter method
- 想改變行為,只要呼叫setter method
- favor object composition over class inheritance
-
比較:abstract class vs interface
abstract class interface is-a like-a method 可以有instance 只能有abstract variable non-final final 應用 關係緊密的物件 規格或功能
Strategy Pattern 策略模式
Introduction 簡介
- 定義行為(演算法)家族,個別封裝起來,讓他們可以互相替換
- 為了達到相同的目的,物件可以因地制宜,讓行為擁有多種不同的實作方法
- 角色
- Context:Client 或 UI介面
- Strategy:interface or abstract class
- Concrete Strategy:實作 Strategy
Example 範例
-
以不同的格式保存文件
-
以不同的演算法壓縮文件
-
以不同的演算法截獲圖像
-
以不同的格式輸出同樣資料的圖形,比如曲線或框圖
-
有戰鬥策略,例如:普通攻擊、技能攻擊、使用物品攻擊
Code 程式碼範例
Reference 參考資料
- Design Pattern 圖:http://www.tektutor.org/is-singleton-design-pattern-a-code-smell/
- SOLID:
https://skyyen999.gitbooks.io/-study-design-pattern-in-java/content/oodPrinciple.html - Strategy Pattern:https://openhome.cc/Gossip/DesignPattern/StrategyPattern.htm
- Strategy Pattern:http://teddy-chen-tw.blogspot.com/2013/08/strategy-pattern.html
- Strategy Pattern:
https://skyyen999.gitbooks.io/-study-design-pattern-in-java/content/strategy.html
沒有留言:
張貼留言