合成复用原则(Composite Reuse Principle, CRP)
核心思想
- 定义
- 尽量使用对象组合(has-a),而不是继承(is-a)来达到复用的目的。
Favor object composition over class inheritance.
引用自:《Design Patterns: Elements of Reusable Object-Oriented Software》
软件复用的手段有很多,最常见的就是继承复用和组合/聚合复用两种:
- 继承复用:通过
extends复用父类的属性和方法。子类可以直接获得父类的实现,编写简单直接。 - 组合复用:在一个类中持有另一个类的对象引用,通过调用被持有对象的方法来完成功能,也就是常说的
has-a关系。
初学面向对象时,我们总是被教导"继承是面向对象的三大特性之一,要多用继承"。但继承真的越多越好吗?合成复用原则告诉我们:在不必要的情况下,优先使用组合而不是继承。