UML 描述類別彼此間的關係,有三種表達方式: Association(關連), Aggregation(聚合) and Composition(組成)。
簡單來說,Aggregation(聚合) 是 Association(關連) 的一種特化;而 Composition(組成) 是 Aggregation(聚合) 的一種特化。
Association(關連):表達某類別中的方法參數是另一類別,或是某類別持有另一類別的指標/參考
Aggregation(聚合):表達一種 "has-a" 的關係,但是不是獨佔的 (也就是說某類別擁有另一類別,但是其他類別也可以擁有該類別)
Composition(組成):類似 Aggregation,但是更加嚴格。某類別擁有另一類別,並且掌管另一類別之生死。當該類物件被 delete,其所 "has-a" 類別也跟著死亡;並且是一種獨佔關係。
參考資料:
1. Design Codes: UML Class Diagram: Association, Aggregation and Composition
2. (原創) association,aggregation,composition有什麼差別?
... ...
8/30/2011
[DP] 繼承或合成, composition 搭配 strategy pattern 範例
簡單明瞭的機器人遊戲範例,清楚說明了 composition 搭配 strategy pattern 的強大,推薦閱讀!
繼承關係在面臨父類 介面更動 需求時,顯得不堪一擊。採用繼承的關鍵是子類 "is-a" 父類,但 更重要的是,這個 "is-a" 的關係, 是否在開發週期間恆常不變 ,如果不是的話 composition 是更好的選擇!
當 上層類 依賴於 組件類 (composition), 不讓 上層類 直接使用 組件 instance,而是使用一個抽象介面 ,那麼就可以達到 run-time 決定選用不同規格的組件 (因為他們都實現相同的介面),更大增加了彈性,這就是 Strategy Pattern
參考資料
... ...
繼承關係在面臨父類 介面更動 需求時,顯得不堪一擊。採用繼承的關鍵是子類 "is-a" 父類,但 更重要的是,這個 "is-a" 的關係, 是否在開發週期間恆常不變 ,如果不是的話 composition 是更好的選擇!
Don't use inheritance just to get code reuse
Don't use inheritance just to get at polymorphism
當 上層類 依賴於 組件類 (composition), 不讓 上層類 直接使用 組件 instance,而是使用一個抽象介面 ,那麼就可以達到 run-time 決定選用不同規格的組件 (因為他們都實現相同的介面),更大增加了彈性,這就是 Strategy Pattern
參考資料
- Inheritance versus composition: Which one should you choose?
- Android Game Development - Design In-game Entities - The Strategy Pattern
... ...
Labels:
composition,
design pattern,
strategy
8/16/2011
[DP] Dependency Inversion Principle 依賴倒轉原則
1. 高階模組不應該依賴低階模組,兩者都應該依賴抽象
2. 抽象不依賴實作細節,實作細節依賴抽象
幾個網路上的文章說明的蠻清楚的,在這邊筆記一下!
— EOF —
Labels:
design pattern,
IoC
Subscribe to:
Posts (Atom)