第10章 合成/聚合复用原则(CARP)
合成/聚合复用原则:在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新的对象通过向这些对象的委派达到复用已有功能的目的。
简言之:要尽量使用合成/聚合,尽量不要使用继承。

10.1 合成和聚合的区别
聚合关系:
关联关系的一种,是强的关联关系。聚合是整体和个体之间的关系。

合成关系:
关联关系的一种,是比聚合关系强的关系。它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期,合成关系是不能共享的。

10.2 复用的基本种类
1. 合成/聚合复用
好处:
1)新对象存取成分对象的惟一方法是通过成分对象的接口。
2)这种复用是黑箱复用,因为成分对象的内部细节是新对象所看不见的。
3)这种复用支持包装。
4)这种复用所需的依赖较少。
5)每一个新的类可以将焦点集中在一个任务上。
6)这种复用可以在运行时间内动态进行,新对象可以动态地引用与成分对象类型相同的对象。
主要缺点:通过使用这种复用建造的系统会有较多的对象需要管理。

2. 继承
优点:
1)新的实现较为容易,因为超类的大部分功能可以通过继承关系自动进入子类。
2)修改或扩展继承而来的实现较为容易。
缺点:
1)继承复用破坏包装,因为继承将超类的实现细节暴露给子类。
2)如果超类的实现发生改变,那么子类的实现也不得不发生改变。
3)从超类继承而来的实现是静态的,不可能在运行时间内发生改变,因此没有足够的灵活性。

10.3
区分“Has-A”与“Is-A”
“Is-A”代表一个类是另一个类的一种;
“Has-A”代表一个类是另一个类的一个角色,而不是另一个类的一个特殊种类。

里氏代换原则是继承复用的基石。

欢迎大家访问我的个人网站 萌萌的IT人