条款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-ahas-ais-impemented-in-terms-of的关系。

(1)is-ahas-a 关系
  • is-ahas-a关系比较容易区分。
(2)is-ais-impemented-in-terms-of关系的区分
  • 在设计类时,是设计成is-a关系,还是设计成is-impemented-in-terms-of关系,要搞清楚类基类的行为是否完全适用于派生类,如果是,那么两个类之间就是is-a关系,即public继承。
  • 如果基类的行为并不完全适用于派生类,那么,可能就要考虑is-impemented-in-terms-of关系,即复合关系。让需要的实现类,包含一个已经实现的类对象,这个对象帮助实现需要的实现类。
posted @ 2019-12-24 11:14  江南又一春  阅读(102)  评论(0编辑  收藏  举报