集合与包容,实质就是组件之间的互相调用。即一个组件使用另一个组件的功能,达到代码复用的作用。只是这种复用是构建在二进制数据上的(因为被复用的组件常常以dll的格式存在),而不是像c++代码复用是以源文件的形式复用。
集合与包容的区别在于:
包容是将内组件的功能进行封装,由外组件提供接口供客户调用,但实质执行任务的仍然是内组件。
集合是将内组件的功能暴露出来供客户调用,让客户感觉好像调用的是外组件的接口一样。
集合实现的方法是先实例化内组件类,返回内组件的IUnknown接口指针pUnk。在外组件的QuryInterface(riid,ppv)中通过if语句根据传入的riid值,调用pUnk->QuryInterface(riid,ppv)返回内组件的指定接口。