FAQ 5.09
组合使软件在开发过程中可以聚合已存在的组件而不用去新建一个。
组合(有时候叫聚合)是将一个对象(部分)放到另一个对象里(组合)。它是一种 has-a 的关系。例如,FordTaurus是由Engine,Transmission,InstrumentPanel,等等组合而成.也就是说,FordTaurus含有一个Engine.(Engine 是FordTaurus的Part-of):
#include <iostream> using namespace std; class Engine { public: virtual void start(); }; void Engine::start() { cout << "starting Engine/n"; } class FordTaurus { public: virtual void start(); protected: Engine engine_; // An Engine is part of a FordTaurus }; void FordTaurus::start() { cout << "starting FordTaurus/n"; engine_.start(); } int main() { FordTaurus taurus; taurus.start(); }
有时候开发者在他们该使用组合的时候错误的使用继承(kind-of),例如,他们可能使FordTaurus从Engine继承,这是把Kind-of和Part-of给搞混乱了.