我正在做一個專案,其中自然的方法是實作一個具有基于不同類的子組件的主物件,例如由 CPU、GPU 組成的 PC...
我從組合結構開始,其中組件具有其子系統固有的屬性和功能,并且每當需要更高級別的屬性時,它們都作為引數給出。
現在,隨著我添加更多功能,擁有不同型別的主要物件是有意義的,例如筆記本,它將擴展 PC 類,但仍然有 CPU 等。目前,我正在使用一個單獨的腳本,其中包含與型別相關的所有函式。
通過對不同型別的主物件使用子類來結合繼承和組合是否被認為是不好的做法?
uj5u.com熱心網友回復:
簡而言之
優先組合而不是繼承并不排除繼承,并且不會自動將兩者結合起來成為一種不好的做法。這是關于做出明智的決定。
更多細節
優先考慮組合而不是繼承的建議是一個經驗法則。它首先由 GoF 創造。如果你閱讀他們的完整論證,你會發現這不是關于組合好和繼承壞的問題。正是這種組合更靈活,因此在許多情況下更適合。
但是你需要根據具體情況來決定。事實上,如果你考慮復合模式的一些變體,葉類和復合類的特化在某些情況下是完全合理的:
- 多型性可以避免很多
ifandcases, - 在某些情況下,組合可能需要額外的呼叫轉發開銷,而這在真正涉及型別專業化時可能不是必需的。
- 組合和繼承的結合可以用來獲得兩全其美(注意:如果應用不小心,它也可能兩全其美)
注意:如果您要使用 UML 圖提供背景關系的簡短概述,則可以在您的特定背景關系中提供更多引數。同時,這個關于 SE的問題,也可能很有趣
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/433916.html
