> 技术文档 > 面向对象分析与设计40讲(7)设计原则之合成复用原则

面向对象分析与设计40讲(7)设计原则之合成复用原则


文章目录

    • 一、概念
    • 二、示例(C++ 实现)
      • 1. 违反合成复用原则的示例(过度使用继承)
      • 2. 遵循合成复用原则的示例(使用组合
    • 三、总结
      • 1. 继承是“强绑定”,组合是“弱关联”
      • 2. 继承固化“静态结构”,组合支持“动态变化”
      • 3. 继承放大“设计缺陷”,组合隔离“局部问题”
      • 一句话总结

一、概念

合成复用原则(Composition Reuse Principle,CRP)是面向对象设计中的重要原则,核心思想是:优先使用对象组合(合成),而不是通过继承来实现代码复用

简单来说,当需要复用已有功能时,应尽量通过 “将已有对象作为新对象的成员变量”(组合)来实现,而不是让新类继承已有类。这样可以避免继承带来的紧耦合问题 —— 子类会依赖父类的实现细节,父类的任何修改都可能影响子类。

合成复用原则的优势:

  • 降低耦合度:组合关系中,新对象仅通过接口使用已有对象的功能,不依赖其内部实现;

  • 提高灵活性:可以在运行时动态更换组合的对象,实现功能的动态扩展;

  • 避免继承链的臃肿:过度使用继承会导致类层次结构复杂(如 “菱形继承” 问题),组合则更灵活。

二、示例(C++ 实现)

1. 违反合成复用原则的示例(过度使用继承)

假设需要实现一个 “游戏角色” 系统,角色需要有 “移动” 和 “攻击” 功能。若使用继承实现复用:

#</