以下的内容大部分来自极客时间的专栏-设计模式之美
面向对象编程中,有一条经典是设计原则,就是:组合优于继承,多用组合少用继承。
继承是面向对象的四大特征之一,用来表示类之间的is-a关系,可以解决代码复用的问题。
继承主要有三个作用:表示is-a关闭,支持多态特性,代码复用。而这三个作用可以通过其他技术手段来达成,比如is-a关系,可以通过组合和接口的has-a关系来替代;多态特性可以用接口实现;代码复用可以通过组合和委托来实现。
继承改写成组合,意味着要做更细粒度的类的拆分。也就意味着要定义更多的类和接口。这些类一单增多,代码的复杂性就提高了,维护成本也提高了。
如果类之间的继承结构稳定,继承层次比较浅(比如2层),关系不复杂,就可以用继承。反之可以考虑用组合来替代。
组合的意思:把需要的东西组合在一个类里面,这个类并不需要继承任何父类,也可以提供想要的行为方法。