文章目錄
-
- 一、概念
- 二、示例(C++ 實現)
-
- 1. 違反合成復用原則的示例(過度使用繼承)
- 2. 遵循合成復用原則的示例(使用組合)
- 三、總結
-
- 1. 繼承是“強綁定”,組合是“弱關聯”
- 2. 繼承固化“靜態結構”,組合支持“動態變化”
- 3. 繼承放大“設計缺陷”,組合隔離“局部問題”
- 一句話總結
一、概念
合成復用原則(Composition Reuse Principle,CRP)是面向對象設計中的重要原則,核心思想是:優先使用對象組合(合成),而不是通過繼承來實現代碼復用。
簡單來說,當需要復用已有功能時,應盡量通過 “將已有對象作為新對象的成員變量”(組合)來實現,而不是讓新類繼承已有類。這樣可以避免繼承帶來的緊耦合問題 —— 子類會依賴父類的實現細節,父類的任何修改都可能影響子類。
合成復用原則的優勢:
-
降低耦合度:組合關系中,新對象僅通過接口使用已有對象的功能,不依賴其內部實現;
-
提高靈活性:可以在運行時動態更換組合的對象,實現功能的動態擴展;
-
避免繼承鏈的臃腫:過度使用繼承會導致類層次結構復雜(如 “菱形繼承” 問題),組合則更靈活。
二、示例(C++ 實現)
1. 違反合成復用原則的示例(過度使用繼承)
假設需要實現一個 “游戲角色” 系統,角色需要有 “移動” 和 “攻擊” 功能。若使用繼承實現復用:
#</