当前位置: 首页 > news >正文

合成复用原则(CRP)

非常好!你已经学习了好几个设计原则,现在我们来讲解合成复用原则(Composite Reuse Principle, CRP)——它和继承是常被比较的一对“重用方式”。


🧠 一句话定义

合成复用原则(CRP)尽量使用“组合/聚合”来实现代码复用,而不是通过继承。


🎯 为什么需要它?

在面向对象中,实现复用有两种方式:

方式举例特点
组合(推荐)类 A 里包含类 B 的对象灵活、低耦合
继承类 A 继承类 B紧耦合、不灵活

我们常说:

继承是“白盒复用”(暴露了内部细节)
组合是“黑盒复用”(只暴露需要的接口)


✅ 优点 vs ❌ 缺点

✅ 优点❌ 缺点
更灵活:运行时可替换组件初期代码稍多
低耦合:不受父类变动影响多一层转发代码
可组合多个能力不如继承简单直观
符合“面向接口编程”思想不熟悉组合的人会嫌“啰嗦”

🐍 Python 示例

❌ 继承复用(不推荐)

class Animal:def eat(self):print("Eating")class Dog(Animal):def bark(self):print("Barking")d = Dog()
d.eat()   # ✅ 复用到了
d.bark()

但如果 Animal 改了,你就可能连 Dog 都出 bug —— 继承让两个类“绑死”了


✅ 合成复用(推荐)

class AnimalBehavior:def eat(self):print("Eating")class Dog:def __init__(self):self.behavior = AnimalBehavior()  # 组合进来def bark(self):print("Barking")def eat(self):self.behavior.eat()  # ✅ 委托给组合对象
  • Dog 拥有 AnimalBehavior 的能力;
  • 如果将来 AnimalBehavior 换成 VeganAnimalBehavior,不用改 Dog 结构;
  • 更灵活、更安全!

🧭 结构图(Mermaid)

has-a 组合
Dog
+eat()
+bark()
AnimalBehavior
+eat()

📦 典型应用场景

  • 游戏角色拥有多个“能力”(组合而非继承)
  • 构建服务时组合多个服务(AuthService, LoggingService)
  • GUI 系统中组件组合成更复杂的 UI(而不是继承出所有种类)

🏁 总结口诀

🧩 能用组合,就别继承!继承是一种“硬绑定”,组合才是“灵活拼装”。


🔁 总结对比:组合 vs 继承

比较项继承组合
耦合度高(父变子崩)低(组合可替)
灵活性固定继承体系可组合多个能力
可替代性强(运行时替换)
设计模式支撑Template MethodStrategy, Decorator 等

如果你希望我用一个真实项目例子(比如:支付系统、角色技能系统、Web Controller组合)来演示「组合复用」的效果,我可以继续带你写一段小实战!

要不要试试看?🚀

相关文章:

  • 洛谷 P1850 [NOIP 2016 提高组] 换教室
  • matlab学习之旅
  • HTTPcookie与session实现
  • QT6 源(70):阅读与注释按钮类 QPushButton,及各种属性验证,
  • 3D人物关系图开发实战:Three.js实现自动旋转可视化图谱(附完整代码)
  • C++ - 数据容器之 forward_list(创建与初始化、元素访问、容量判断、元素遍历、添加元素、删除元素)
  • 方案解读:华为-智慧园区数字平台技术方案【附全文阅读】
  • systemd-notify(linux服务状态通知消息)
  • 如何基于HAL库进行STM32开发
  • 模拟SIP终端向Freeswitch注册用户
  • 一键部署自己的私域直播
  • 具身系列——PPO算法实现CartPole游戏(强化学习)
  • operator 可以根据需要重载 == 运算符进行比较
  • Cadence高速系统设计工具
  • 0基础 | STM32 | TB6612电机驱动使用
  • DeepSeek辅助学术写作之提交和出版以及评审过程分析提示词分享祝你顺利毕业~
  • 肥胖风险的多类预测——CatBoost模型的89%
  • Y1——树状数组入门
  • 每天一道面试题@第五天
  • 推理能力:五一模型大放送
  • 辽宁召开假期安全生产工作调度会:绝不允许层层失守,绝不允许“带病运行”
  • 3:0战胜日本队,中国羽毛球队挺进2025苏迪曼杯决赛
  • “五一”前两日湖北20多家景区实施限流
  • 新加坡2025年大选开始投票
  • 徐丹任武汉大学药学院院长:研究领域在国际上处领跑地位
  • 家政阿姨如何炼成全国劳模?做饭、收纳、养老、外语样样都会