至少未來在設計時要參考直接看網站比翻pdf快。
- Composition
顧名思義,就是透過組合的方式產生一個新的Class,而這新的Class所擁有的各種function,
其實都算是源自於其他被組合的Class中所原有的各種功能,只是透過delegating機制,讓Composition Class
可以好好加以善用這些funciton,有時候我們會稱為這樣的模式為 Aggregation or Containment.
在GoF(Aggregation) / UML(Aggregation) / Coad(Containment)
到底要怎麼選擇用繼承或者用組合的方式來設計domain obj,這裡有幾個參考的標準,若符合以下標準,則可以使用繼承
的方式來進行
- 子類別是一個特殊的父類別,而非只是扮演一個父類別的角色
- An instance of a subclass never needs to become an object of another class
- 子類別中不需要去覆寫(override)父類別的functions,或者否定(nullifies)父類別中的定義
- 如果父類別本身幾乎就近乎只是(merely)一個Utility Class,那就也沒有繼承的必要了
- For a class in the actual Problem Domain, the subclass specializesa role, transaction or device
這一句我不太清楚到底該怎麼翻譯才好,以下是個人假想的:
子類別主要會專注角色(role) ,或者是物件之間的關係傳遞交易(transaction),或甚至是擔任一個裝置(device)介面
底下來個使用Composition的案例印證,在合適的時機使用繼承搭配組合關係,讓系統設計得更具有彈性
沒有留言:
張貼留言