文章目录
-
- 一、概念
- 二、示例(C++ 实现)
-
- 1. 违反合成复用原则的示例(过度使用继承)
- 2. 遵循合成复用原则的示例(使用组合)
- 三、总结
-
- 1. 继承是“强绑定”,组合是“弱关联”
- 2. 继承固化“静态结构”,组合支持“动态变化”
- 3. 继承放大“设计缺陷”,组合隔离“局部问题”
- 一句话总结
一、概念
合成复用原则(Composition Reuse Principle,CRP)是面向对象设计中的重要原则,核心思想是:优先使用对象组合(合成),而不是通过继承来实现代码复用。
简单来说,当需要复用已有功能时,应尽量通过 “将已有对象作为新对象的成员变量”(组合)来实现,而不是让新类继承已有类。这样可以避免继承带来的紧耦合问题 —— 子类会依赖父类的实现细节,父类的任何修改都可能影响子类。
合成复用原则的优势:
-
降低耦合度:组合关系中,新对象仅通过接口使用已有对象的功能,不依赖其内部实现;
-
提高灵活性:可以在运行时动态更换组合的对象,实现功能的动态扩展;
-
避免继承链的臃肿:过度使用继承会导致类层次结构复杂(如 “菱形继承” 问题),组合则更灵活。
二、示例(C++ 实现)
1. 违反合成复用原则的示例(过度使用继承)
假设需要实现一个 “游戏角色” 系统,角色需要有 “移动” 和 “攻击” 功能。若使用继承实现复用:
#</