博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个组件框架的构建
阅读量:5052 次
发布时间:2019-06-12

本文共 2092 字,大约阅读时间需要 6 分钟。

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

1:组件定义:

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

实现接口中的方法

一个组件通常由一个外部头文件和若干个实现文件组成,通过库和头文件形式发布

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

2:接口定义:

明确接口的用途、范围

确定接口中的方法

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

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

3:组件管理:

分配接口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,组件使用者只需要从组件管理模块获取对应组件,就可以通过组件提供的工厂方法实例化接口并使用,这里组件提供者和使用者完全分离,可以独立开发,也可以在不需要的时候快速裁剪。

转载请注明原始出处:

转载于:https://www.cnblogs.com/chencheng/p/3290370.html

你可能感兴趣的文章
STL-map
查看>>
第三周进度条
查看>>
Keil的lib生成个人总结
查看>>
java程序员常见面试题
查看>>
java @SuppressWarnings注解
查看>>
C语言位域
查看>>
Python量化教程 常用函数
查看>>
webpack笔记一 起步
查看>>
docker容器启动设置固定IP
查看>>
安装python爬虫scrapy踩过的那些坑(转载+整理)
查看>>
VC++ 的MFC 和ATL 及COM 是什么?
查看>>
MySQL Explain 总结
查看>>
ELK批量删除索引
查看>>
团队作业 团队组织方式讨论
查看>>
图片加载
查看>>
numpy学习小结
查看>>
ios单例模式-全局静态类
查看>>
我的世界2
查看>>
jquery_扩展
查看>>
Kubernetes Master节点灾备恢复操作指南---升级版
查看>>