一個組件框架的構建

組件:提供特定功能的軟件實體,可以獨立編譯,經過不一樣的接口表現不一樣的行爲。目標是實現組件開發和產品開發分離,接口和實現分離。經過註冊組件能夠在產品中快速的定製組件相關的功能。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

相關文章
相關標籤/搜索