Abstract
最近在看侯捷C++面向对象高级开发(上)。有兴趣的小伙伴可以去看看,讲的很好。侯捷老师介绍了c++ OOP设计的三板斧:
① Inheritance继承
② Composition 复合
③ Delegation 委托
Composition 复合
复合表示的是has-a.侯捷老师举了一个STL中的例子:
下面的Code来自Visual Studio:queue.h,和侯捷老师给的代码差不多
队列queue有一个数据元素是deque。queue has a deque。
用图表示两个类的关系是:
抽象出来:就是下图所示:
对与Composition关系来所:
构造函数:
Container的构造函数首先调用Component的default的构造函数,然后才执行自己的。
析构函数:
Container的析构函数首先执行自己,然后才调用component的析构函数。
其实这也很符合我们的期望。就好像洋葱一样:首先生成的是内部的皮,再生成外部的皮。剥洋葱的时候:是先剥外面的皮,再剥洋葱里面的皮。
Delegation 委托 (Composition by reference)
正如别名Composition by reference,这就是在Container里加一个Component的引用(指针).
这样做和Composition有什么不同呢?
Composition中的Container和Component的生命周期是一样的,也就是Container和Component是同时创建,同时析构。
但是Delegation中的生命周期是不同的