面向对象编程中,有一条非常经典的设计原则,那就是:组合优于继承,多用组合少用继承。
- 为什么不推荐使用继承?
- 组合相比继承有哪些优势?
- 如何判断该用组合还是继承?
1. 为什么不推荐使用继承?
继承层次过深、继承关系过于复杂会影响到代码的可读性和可维护性。
其实,对于相对来说比较复杂的需求,比如,会飞又会叫的鸟类例子中,类的继承关系过深后,会导致类暴露的接口过多,代码阅读起来也很不方便!
2. 如何判断该用组合还是继承?
如果类之间的继承结构稳定(不会轻易改变),继承层次比较浅(比如,最多有两层继承关系),继承关系不复杂,我们就可以大胆地使用继承。
反之,系统越不稳定,继承层次很深,继承关系复杂,我们就尽量使用组合来替代继承。除此之外,还有一些设计模式会固定使用继承或者组合。比如,装饰者模式(decorator pattern)、策略模式(strategy pattern)、组合模式(composite pattern)等都使用了组合关系,而模板模式(template pattern)使用了继承关系。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。