问大家一个设计细节问题
最近在设计一个GUI框架。
在消息分发那里,有点难以选择。
当窗口分发消息的时候,是应该 把消息打包然后调用UI控件的某个特定接口呢 还是每个事件都调用UI控件的特定接口呢?
方案1.实现如下
case WM_MOVE:
{
event.msg = UIMOUSE_MOVE;
UI->handleEvent(event);
}
case WM_KEYDOWN:
{
event.msg = UI_KEYDOWN;
UI->handleEvent(event);
}
方案2 实现如下
case WM_MOVE:
{
UI->onMouseMove(pt);
}
case WM_KEYDOWN:
{
UI->onKeyDown(,,,,);
}
个人认为
方案1,扩展控件只需用实现一个方法,接口整洁。handleEvent里面用case 选择自己感兴趣的去处理。
方案2,此方法局限太大。当扩展的时候,要重实现很多接口。另外不停的从基类虚-查找到具体类的接口,效率不怎么雅观。(虽然实际上看不出来)
代码也没增加或者减少。两者起的效果是一样的。
单纯从扩展,或者应该,不应该的角度去考虑。哪种方案相对比较好呢?
[解决办法]
第一种