句柄类是存储和管理基类指针的一个类
需要句柄类的背景:
1)在对安全要求很高的领域,即使核心实现已经封闭在库中不可见,但头文件中变量定义仍可能曝露一些内部信息
2)在设计初期、实现部分会经常变动,甚至头文件中变量定义也需要经常变动,因此在重编译的时候头文件也需要编译,
有时候导致编译时间过长。
句柄类就是为了解决这类问题
// Handle.h
class Implement; //这里是对真正实现功能的类的声明

class ImplementHandle //这是Implement类的句柄类
{
public:
ImplementHandle():lpImplementInstance(NULL){lpImplementInstance = new Implement;}
~ImplementHandle(){ delete lpImplementInstance ;}
public:
// Interface_FOO() 是句柄类提供的接口,它的真正实现是在Implement类里面,而这个仅仅是接口"代理"
RE_TYPE Interface_FOO()
{
return lpImplementInstance->FOO
_
Implementation(); //句柄代理调用实现真正的FOO接口
}
//还有其他的接口也一样,均是用句柄类代理接口
//....
private:
Implement * lpImplementInstance; //这个是句柄类唯一的数据成员(当然,并不一定),可以被句柄类很好地自动管理
};




  被封装在句柄类里面的真正实现(class Implement)将与用户隔离开来,就是说,就算以后Implement 类的实现有所改变,
只要它提供的接口不变,那么它的句柄类就不会改变,而包含句柄类的用户,也不用做任何相应的改变(所有包含 “Handle.h”的模块甚至不用从新编译就可以正常更新至最新的Implement实现)。

例如
#include "Handle.h"
Imlementhandle testhandle;
testhandle->Interface_Foo();//调用接口即可。
如果改动了Implent类的方法

  于此相反,如果直接用class Implement 的定义,那么只要Implement类的定义有所改变(不管是public 还是private 成员
的更新),那么所有包含它的头文件的模块都要从新编译一次。

这其实就是接口与实现的分离,


Posted on 2008-10-07 16:13 micheal's tech 阅读(1139) 评论(0)  编辑 收藏 引用 所属分类: C++ programme language设计模式

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理