一个组件框架的构建

组件:提供特定功能的软件实体,可以独立编译,经过不一样的接口表现不一样的行为。目标是实现组件开发和产品开发分离,接口和实现分离。经过注册组件能够在产品中快速的定制组件相关的功能。html

1:组件定义:框架

明确组件的性质、用途、包含的接口spa

实现接口中的方法指针

一个组件一般由一个外部头文件和若干个实现文件组成,经过库和头文件形式发布日志

//组件ID,组件管理机构统一分配
#define
CID_TRACE 0x00000001
//组件实例化接口,由组件提供者实现 ICOMP* insTraceComp();

2:接口定义:code

明确接口的用途、范围htm

肯定接口中的方法blog

接口由头文件组成,包括接口ID定义和接口定义接口

//接口ID,组件管理机构统一分配
#define IID_IPRINT 0x00000001
#define THIS IPRINT*
//接口方法
DECLARE_INTERFACE(IPRINT)
{
    METHOD(void,init)(THIS);
    METHOD(void,print)(THIS);
};

3:组件管理:ci

分配接口ID

分配组件ID

包含注册组件的信息,根据用户申请分配组件、管理组件

4:典型流程:

系统初始化阶段:组件使用者实例化组件,将其注册到组件管理器中。

运行期间:经过组件ID查找组件获取对应的工厂指针,经过工厂建立接口实例,使用接口实例方法。

 

 

 5:一个日志组件定义

  • 接口实现:
DECLARE_IMPLEMENT(PRINT)
{
    METHOD(void,init)(THIS);
    METHOD(void,print)(THIS);
};

void init(THIS pThis);
void print(THIS pThis);

THIS insPrint()
{
    PRINT *pPrint = NULL;
    
    pPrint = (PRINT*)malloc(sizeof(PRINT));
    pPrint->init = init;
    pPrint->print = print;

    return (THIS)pPrint;
}
  • 组件工厂实现:
BOOL insInterface(ID iid,void** ppObj);

ICOMPFACTORY* insTraceCompFactory()
{
    ICOMPFACTORY* pFactory = NULL;

    pFactory = (ICOMPFACTORY*)malloc(sizeof(ICOMPFACTORY));
    pFactory->instance = insInterface;

    return pFactory;
}

BOOL insInterface(ID iid,void** ppObj)
{
    switch(iid)
    {
    case IID_IPRINT:
        *ppObj = insPrint();
        break;
    default:
        break;
    }
    return TRUE;
}
  • 组件实现:
ICOMP* insTraceComp()
{
    ICOMP* pComp = NULL;

    pComp = (ICOMP*)malloc(sizeof(ICOMP));
 
    pComp->cid  = CID_TRACE;
    pComp->pFactory = insTraceCompFactory();
    
    return pComp;
}

6:组件的使用:包括选择、实例化、使用组件

  • 系统初始化阶段实例化、注册组件
ICOMP* pComp = NULL;
//实例化组件
pComp = insTraceComp();
//注册组件
COMP_RegistComponent(pComp);
  • 运行期间用户使用组件:
ICOMP* pComp = NULL;
IPRINT* pPrint = NULL;
//根据组件ID获取组件
COMP_GetComponent(CID_TRACE, (void**)&pComp);
//根据组件工厂获取接口实例
if(NULL != pComp)
{
    pComp->pFactory->instance(IID_IPRINT,(void**)&pPrint);
}
//使用接口
if(NULL != pPrint)
{
    pPrint->init(pPrint);
    pPrint->print(pPrint);
}

7:总结

不一样的组件开发者根据接口规范能够提供不一样的实现,经过组件管理机构分配惟一的组件ID,组件使用者只须要从组件管理模块获取对应组件,就能够经过组件提供的工厂方法实例化接口并使用,这里组件提供者和使用者彻底分离,能够独立开发,也能够在不须要的时候快速裁剪。

转载请注明原始出处:http://www.cnblogs.com/chencheng/p/3290370.html

相关文章
相关标签/搜索