首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个关于怎么利用C++设计模式的有关问题

2013-03-01 
一个关于如何利用C++设计模式的问题问题描述:我有个菜单界面,如下0001-属性配置0002-菜单管理0003-交易开

一个关于如何利用C++设计模式的问题
问题描述:
我有个菜单界面,如下
0001-属性配置
0002-菜单管理
0003-交易开发配置,
要求双击每个菜单名时,能弹出相应的界面,且能方便扩展。

双击时,只能获取到菜单的文字信息串,也就是这些"0001-属性配置","0002-菜单管理","0003-交易开发配置",其中每个菜单名对应的画面为一个class,比如0001对应的class为F0001,0002对应的class为F0002,
而F0001,F0002,F0003这些类都继承BaseForm类。
现在假如我双击调用的事件为 PopTrade(const QString& MenuId),我是这样实现的,
先定义一个QMap<Qstring, BaseForm*> InterfaceMap,初始化时,将菜单ID与相应的类进行关联:


InterfaceMap.insert("0001", new F0001);
InterfaceMap.insert("0002", new F0002);
InterfaceMap.insert("0003", new F0003);

然后,在双击事件PopTrade(const QString& MenuId)中,进行调用:

BaseForm *PForm = InterfaceMap.find(MenuId).value(); //找到MenuId对应的class
PForm->exec(); //exec()为显示相应的菜单界面

但是这样有个问题,就是当我今后对菜单了扩展时,就变的很麻烦了,比如我又加了一个0004-客户信息的菜单,于是,相应的也加了一个F0004的类,但是,我又不得不进行
InterfaceMap.insert("0004", new F0004);这样感觉很麻烦,如果菜单有了上百个,岂不是很费劲?
[解决办法]
简单点就用 工厂模式,传“MenuId”进行初始化调用

注册和调用、销毁等要齐全
[解决办法]
对,工厂模式就好。此模式目的在于封装变化,根据参数对外提供一个合适的服务

热点排行