类继承和对象组合(摘录设计模式)

类继承和对象组合是OOB中最常用的两种 技术。
1. 类继承
又被称为白箱复用,white box reuse。
优点:
类继承可以方便的改变复用的实现,当一个子类重定义了一些而不是全部操作时,它也 能影响它所继承的操作。
缺点:
在编译时刻就定义了,无法在运行时刻改变从父类继承的实现。
子类实现与父类紧密地依赖,父类实现的任何变化将影响子类。这种依赖限制了灵活性和复用性。
一个解决方法就是只继承抽象基类,抽象类一般提供较少的实现。
2. 对象组合(object composition)
又被称为黑箱复用,black box reuse.
对象组合通过获得对其他对象的引用而在运行时刻动态定义。
优点:因对象是只能通过接口访问,所以并不破坏封装性。只要类型一致,运行时刻可以用一个对象替代另一个对象。
因为对象的实现是基于接口写的,所以实现存在较少的依赖关系。
另外,优先使用组合有助于保持类的封装,集中在单个任务上。这样类和类继承层次保持较小规模,不会增长为不可控制的庞然大物。
还有,基于对象组合的设计会有更多的对象而不是较少的类,且系统的行为将依赖于对象间的关系而不是被定义在某个类中。
所以,
“优先使用对象组合,而不是类继承”

原文地址:https://www.cnblogs.com/dqshll/p/1116452.html