Inside COM读书笔记-----包容和聚合

1.      包容和聚合

包容和聚合实际上是使一个组件使用另一个组件的一种技术。

包容简介

         外部组件包含指向内部组件接口的指针,外部组件只是内部组件的一个客户。外部组件也可以通过将调用转发给内部组件的方法重新实现内部组件所支持的某个接口,并且外部组件还可以在内部组件代码的前面加上一些代码以对接口进行改造。

         聚合简介

         聚合是包容的一个特例,当一个外部组件聚合了某个内部组件的一个接口,外部组件将直接把内部组件的接口指针返回给客户。客户可以直接与内部组件通信。

        

2.      客户端的简化

可以通过封装解决接口查询的臃肿、AddRef、Release的调用问题。使用智能指针类来封装接口指针和通过包装类对接口进行封装。

         智能接口指针

         智能接口指针的使用同常规的C++指针的使用是相同的,他将引用计数这类细节隐藏起来,当程序的执行离开了智能接口指针的作用域之后,相应的接口将被释放掉。

         智能指针实际上就是一个重载了-》的类。智能接口指针类保护指向另外一个对象的指针。当用户调用智能指针上的-》操作符时,智能指针把此调用转发给他所包含的指针所指的对象,智能接口指针中包含的指针将是一个指向一个接口的。

class CFoo

{

public:

    virtual void Bar();

};

 

classCFooPointer

{

public:

    CFooPointer(CFoo*p){m_p = p;}

    CFoo*operator ->(){returnm_p;}

private:

    CFoo*m_p;

};

 

voidFunky(CFoo *pFoo)

{

    CFooPointerspFoo(pFoo);

    spFoo->Bar();

}

 

Funky函数创建了一个名为spFoo的CFooPointer对象并用pFoo对其初始化。spFoo指针将把相应函数调用转发给m_p也就是pFoo。


CFooPointer作为一个智能指针是不够,实际上并没有做任何事情。

 

C++包装类

         若希望封装某个接口或接口集,可以使用C++包装类。包装类是一个或多个COM接口的客户。包装类实际上就是组件的包容。

 

 


        

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iot-genius

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值