定义:优先使用对象组合,而不是继承来达到复用的目的。
实现方法:在新对象里,通过关联关系(包括组合关系和聚合关系)来使用已有的对象,使之成为新对象的一部分;
可以说新对象通过委派调用已有对象的方法达到复用功能的目的
简言之:复用时要尽量使用组合/聚合关系(关联关系),少用继承。
一般而言,如果两个类之间是“Has-A”关系应使用组合或聚合,如果是“Is-A”关系可使用继承
- “Is-A”是严格的分类学意义上的定义,意思是一个类是另一个类的一种;
- 而“Has-A”则不同,它表示某一个角色具有某一项责任。
为什么尽量关联,少用继承:
因为组合/聚合关系可以使系统更加灵活,降低类与类之间的耦合度,一个类的变化对其他类造成的影响相对较少
有效使用继承有助于对问题的理解,降低复杂度,而滥用继承会增加系统构建和维护的难度,及系统复杂度,因此要慎用继承
继承的问题
- 继承复用会破坏系统的封装性,也不够灵活
- 因为继承会将基类的实现暴露给子类,由于基类的某些细节对子类是可见的(被称为白箱复用)。
- 如果基类发生改变,那么子类的实现也不得不发生改变。
- 从基类继承而来的实现是静态的,不可能在运行时发生改变,没有足够的灵活性;
- 而且继承只能在有限的环境中使用(如类没有声明为不能被继承)。
组合的好处
- 组合或聚合关系可以将已有的对象(也可称为成员对象)纳人到新对象中,使之成为新对象的一部分
- 因此新对象可以调用已有对象的功能
- 这样做可以使成员对象的内部实现细节对于新对象不可见(被称为黑箱复用)
- 相对继承关系而言,其耦合度相对较低,成员对象的变化对新对象的影响不大
- 可以在新对象中根据实际需要有选择性地调用成员对象的操作
- 合成复用可以在运行时动态进行新对象可以动态地引用与成员对象类型相同的其他对
文章强调了在软件设计中优先考虑对象组合而非继承来实现代码复用的原则。组合和聚合关系允许新对象通过关联已有对象来复用功能,降低了类间的耦合度,提高了系统的灵活性。相比继承,组合提供了更好的封装性和适应性,因为继承可能导致基类的实现细节暴露给子类,影响系统的稳定性和可维护性。
685

被折叠的 条评论
为什么被折叠?



