面向对象编程中,有一条非常经典的设计原则,那就是:组合优于继承,多用组合少用继承。
  • 为什么不推荐使用继承?
  • 组合相比继承有哪些优势?
  • 如何判断该用组合还是继承?

1. 为什么不推荐使用继承?

继承层次过深、继承关系过于复杂会影响到代码的可读性和可维护性。
其实,对于相对来说比较复杂的需求,比如,会飞又会叫的鸟类例子中,类的继承关系过深后,会导致类暴露的接口过多,代码阅读起来也很不方便!

2. 如何判断该用组合还是继承?

如果类之间的继承结构稳定(不会轻易改变),继承层次比较浅(比如,最多有两层继承关系),继承关系不复杂,我们就可以大胆地使用继承

反之,系统越不稳定,继承层次很深,继承关系复杂,我们就尽量使用组合来替代继承。除此之外,还有一些设计模式会固定使用继承或者组合。比如,装饰者模式(decorator pattern)、策略模式(strategy pattern)、组合模式(composite pattern)等都使用了组合关系,而模板模式(template pattern)使用了继承关系。


Allen0323
7 声望1 粉丝

引用和评论

0 条评论