Com组件的两种复用方式:包容与集合的区别
最近在看《ATL开发指南》,学习下ATL框架,应该是等同于MFC框架,是对COM这种技术封装。
- Com包容也被称作委派,其实类似于C++中类的组合复用模式,类的组合是我们熟悉的。所以概念上理解很容易。实现起来,主要通过外部组件完全控制内部组件的生存期,外部组件内部维护一个内部组件实例,外部组件为了扩充提供内部组件的接口必须同样声明相应的接口,实现部分则简单地调用内部组件的接口。
- Com集合也是一种组件复用方式,与包容很相似,唯一的区别就是内部组件接口直接对外公开。这种实现技术上稍微比包容复杂,它是通过将内部组件的IUnknown指针委托给外部组件的IUnknown指针,统一管理组件的接口。
一个商店有一个老板和两个店员a、b,b已经工作很多年了,a是新来的。于是有两种工作方式。
当一个客户要买东西时,他找到老板,说要买东西,于是老板让他直接找b,因为b对商店很了解(聚合)。以后再没有老板什么事了。或者老板告诉a该干什么,a去干了,然后汇报给老板,老板再汇报给客户,客户可能结束这次访问或者告诉老板还有什么要求,于是老板再让a去做,实际做事情的a和客户之间需要老板来协调(包容)。
上面这个隐喻主要从两种方式的工作原理进行区分,处理同样一件事的内部流程是有不同的,仅从概念上理解是比较困难的,实践中去品味。