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

一个关于如何利用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”进行初始化调用

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