发布时间 : 星期三 文章简单接口实现规范更新完毕开始阅读
II、 Extern.h
class CExtern { public: private: }
CIFooHelper
m_IFooHelper;
BOOL CreateIFoo(); void UseIFoo(); void CloseIFoo(); CExtern(); ~CExtern();
第21页 共68页
III、 Extern.cpp
CExtern::CExtern() { }
CExtern::~CExtern() { CloseIFoo(); }
BOOL CExtern::CreateIFoo() { if (!m_IFooHelper.Create()) TRACE(“%s”, m_IFooHelper.GetErrMsg()): else return TRUE; }
void CExtern::UseIFoo() { if (m_IFooHelper.IsValid()) m_IFooHelper->DeleteName(“abc\ }
void CExtern::CloseIFoo() { m_IFooHelper.Close(); }
第22页 共68页
5、 Helper类的优点和缺点 I、
Helper类的优点
? Create()简化了初始化操作 ? 包含和隐藏了接口,非常简洁
II、 Helper类的优点
? 一个Helper类对象实例只能对应一个接口对象实例
? 容易疏忽Create()和IsValid()函数,特别是IsValid()函数,(下面可以参考Factory,由于
直接使用接口指针,所以犯错误的机会相对要小一点)
第23页 共68页
二、 接口的辅助类:Factory类
1、 概念
上面提到的Helper类非常好用,但有其缺陷。
如果我们希望有这样一种helper类,可以管理多个接口对象,甚至还可以管理一个包(例
如:某个dll文件)的多个类型的多个接口对象。(不过,我个人的习惯,宁愿写多个Factory类,这样结构更清晰)
这时,我们就要用到Factory类。
2、 使用Factory类的几个要点
? Factory类不包含接口的指针,由客户(即CExtern)自己管理接口对象
? Factory类只管接口对象的创建,但不管其销毁,即Factory类只有Create()函数,但没
有Close()函数
? 接口对象的销毁,直接调用接口的Release()方法
? 一般情况下,要求Factory的生命期长于接口对象,即销毁Factory对象前,必须先销毁
由其创建的接口对象
? 接口的使用,直接使用接口指针,不通过Factory类
3、 Factory类一般在接口头文件里实现,可以和Helper类在一起
由于Factory类是服务接口编写人编写,同时提供给客户项目编写人,放入客户的工程中。
所以,从简单考虑,最好将Factory类的声明和实现,全部放在接口的头文件里。 这样,只需要提供一个头文件给客户工程即可。
同时,我们可以在接口文件里即包含helper类,也可以包含Factory类。
第24页 共68页