读书人

结构设计的有关问题

发布时间: 2012-02-17 17:50:42 作者: rapoo

结构设计的问题,高手请进
简单点说:
有CDevice1 CDevice2 CDevice3三个类,每个都起自己的线程并阻塞方式运行.有CPolling 类,需要定时调用它以取它状态,并可给它命令.
图如下:

========== ========= ======== ========
| CDevice1 | | CDevice2| |CDevice3| |CPolling|
========== ========= ======== ========
↑ ↑ ↑ ↑
↓ ↓ ↓ ↓
=======================================================
|CWhat ? |
| |
=======================================================
↑ |
↓ ↓
============ ===============
| CSocketCmd | | CSaveModule |
============ ===============

中间一层我强命名个CWhat模块,这个结构怎么设计好呢?
首先要排除用SendMassage(),因为要继承CWnd而且要太多的swtich().这样性能影响太大.
我靠虑过这样:
Interface IDevice1{..} IDevice2{..} IDevice3{..} ...
class CWhat:public IDevice1,public IDevice2, public IDevice3
{
void Dev1();
void Dev2();
void Dev3();
...
}

在CDevice中这么调用:
void CDevice::Regist(IDevice1* pDev1)
{
_pDev1 = pDev1;
...
}
void CDevice::ThreadCallBack()
{
_pDev1-> IDevice1Funtion();
}
//这样实现了Device调用CWhat的过程,再这么定义接口,再这么调用,可实现CWhat调用各个Device的过程.

//注: 各个Device功能各不相同,无法在它们上面抽个基类.

这样原本是个不错的方案,但是,唉,像CDevice这样的类很多,CWhat要继承
太多的接口.
大家有什么好办法? 欢迎大家来讨论.




[解决办法]
所有的 CDevice1都继承一个接口 IDevice,这个接口有个共有方法 DoSomething
然后CWhat里维护一个列表 vector <> , array都可以

void CDevice::Regist(IDevice* pDev)
{
m_vector.push_back(pDev);
}

void CDevice::ThreadCallBack()
{
for (xxx)
{
IDevice* pDevice = vector[i];
if (pDevice != NULL)
pDevice-> DoSimething();


}
}

[解决办法]
好诱人的200分, 可惜看不大明白.

用C++的模板行不行呀?

template < class _DevType >
class CDevice{...

template < class _DevType >
void CDevice::Regist(_DevType* pDev)
{
_pDev = pDev
...
}

哎, 不清楚CDevice是怎么回事, 图里没出现
[解决办法]
加个CDeviceManager类管理所有的Device,CWhat再包含CDeviceManager
[解决办法]
一会 CDeviceX 一会 IDevice 一会 CWhat 他们之间什么关系啊,看晕了,可否清晰的阐述一下
[解决办法]
不明白接口为什么一定要很多,同类型的设备接口本来就应该是大同小异的,不同的一般都只是参数,参数的问题本来也不是问题,用结构参数就可以解决。结构类型本来就可以很灵活,定一个基类,以基类指针做参数传递,使用时再强制转换成需要的结构类型就可以了,担心不安全的还可以在基类定一个虚接口说明该结构类的实际名称,每次强制转换前先根据这个虚接口来判断就行。
[解决办法]
如果不想定义太多接口可这样定义:
struct IDeviceEvent
{
long OnEvent1(int nEventId, void* pSender, void* pParam);
};
CWhat只用继承IDeviceEvent,再通过nEventId等条件判断。

另外不明白你的CWhat是干什么的?

读书人网 >VC/MFC

热点推荐