条款38:通过复合塑模出has-a 关系或 is-impemented-in-terms-of关系
1、什么是复合?
复合是类型之间的一种关系,当某种类型的对象包含其它类型对象时,便是这种关系。
2、复合描述的关系的细分
(1)复合意味着两种关系
has-a
关系is-impemented-in-terms-of
关系
(2)细分依据
区分这两种关系的依据:根据程序处理的不同领域。
(3)应用域和实现域
- 应用域:客观的,描述现实世界的东西的类。(比如:一辆汽车,一条狗)。应用域类型之间的复合,描述的是
has-a
关系。 - 实现域:人造的,描述实现细节的东西的类。(比如:缓冲区、互斥器、查找树)。实现域之间的复合,描述的是
is-impemented-in-terms-of
关系。
3、在设计类时区分is-a
和has-a
、is-impemented-in-terms-of
的关系。
(1)is-a
和has-a
关系
is-a
和has-a
关系比较容易区分。
(2)is-a
和is-impemented-in-terms-of
关系的区分
- 在设计类时,是设计成
is-a
关系,还是设计成is-impemented-in-terms-of
关系,要搞清楚类基类的行为是否完全适用于派生类,如果是,那么两个类之间就是is-a
关系,即public
继承。 - 如果基类的行为并不完全适用于派生类,那么,可能就要考虑
is-impemented-in-terms-of
关系,即复合关系。让需要的实现类,包含一个已经实现的类对象,这个对象帮助实现需要的实现类。