分析MFC的设计模式-----行为模式
这篇文章时,试图查阅一些中文资料,结果却很令人失望,我几乎找不到一篇介绍mfc设计模式的文章,所以,我写了以下的这些内容,还望批评指正。
职责链在MFC中的应用
在mfc中,消息如果是从子类流向父类(纵向流动),那么事情再简单不过,整个Message Map消息映射表已规划出十分明确的路线。但MFC 之中用来处理消息的C++ 类别并不呈单线发展,作为application framework 的重要结构之一的文档/视图结构,也具有处理消息的能力,因此,消息应该有横向流动的机会。MFC 对于消息循环的规定是:
1.如果是一般的Windows 消息(WM_xxx),一定是由派生类别流向基础类别,没有旁流的可能。
2.如果是命令讯息WM_COMMAND,就有奇特的路线了,这个路线将会在下面结合Chain of Resposibility(职责链)予以介绍。
MFC中,命令的映射就是一个Chain of Resposibility(职责链)。在MFC中,用户接口命令是以命令消息的形式被处理的。CcmdTarget类是所有可以接受和处理消息的类的父类。它提供消息映射表接口,可以把映射的消息ID对应于相关的消息处理器。一个命令消息在职责链中的类传递,直到其中一个为她提供了处理器为止。
在MFC中,先由CwinApp类获得消息,并且把它们分派到适合的窗口。大多数的命令消息被发送给应用程序的主桢窗口类来处理。传送的不同顺序是根据不同的消息类型由类库预先确定的。
Standard Command Route in MFC:(图形无法输入)
例如,在一个多文档应用程序中,一个菜单命令被选中,则消息沿着以下的链传递:
1. 主桢窗口
2. 主桢窗口传递消息到当前活动的多文档的子窗口
3. 多文档子窗口在检查她自己的消息映射表前把消息传送给她所对应的视图类,4. 看是否有相应的处理器。
5. 视图类检查她自己的消息映射表,6. 如果没有对应的处理器则她把消息返回给她所对应的文档类。
文档/视图模式的标准信息传递
7. 文档类检查她自己的消息映射表,8. 如果没有对应的处理器则将消息返回给她所对应的文档模版。
9. 文档类模版如果仍然不10. 能处理,11. 则返回消息倒视图类模版,12. 如果还不13. 能处理,14. 则依次返回到主桢窗口类和应用程序。
当消息一找到他所对应的消息处理器时,她就结束消息传递。
待续!