组合/聚合复用原则
什么是组合/聚合原则?
聚合:A类持有B类的“弱”引用,这里的弱引用指的是可以被垃圾回收器回收,它具有短暂的生命周期,也就是说对象A持有对象B的引用,但是对象B不持有对象A的引用,但是B类和A类没有任何类层次关系。例如雁群持有大雁的弱引用,雁群可以有多只大雁,所以雁群和大雁是聚合关系。
组合:A类持有B类的“强”引用,也就是说A类由B类组合而成,B类是A类必不可少的一部分,并且B类不会被垃圾回收器回收,它们具有相同的生命周期。例如大雁持有翅膀的强引用,翅膀是大雁不可分割的一部分,所以翅膀和大雁是组合关系。
(注意:组合指的是B类可以使A类中的一个List<A>集合,也可以是单个对象B)
组合/聚合复用优于继承
继承违背了开闭原则:继承打破了封装性,子类继承父类,那么父类的实现细节将完全暴露在子类当中,随着时间的推移,如果父类发生变化将会影响子类的也发生变化,所以在使用继承前,请确保子类是否完全是超类型的子类,即判断是否is-a,如果不是请不要使用继承。
无论是组合还是聚合,它们都持有对象的引用,在不继承类的前提下可以在内部调用引用的方法,这叫做转发,降低耦合度。
适当使用组合/聚合的好处就是明确每个对象的职责,滥用继承则是结构化的思想