问题
熟悉VC/MFC的都知道,VC是”基于消息,事件驱动“,消息在VC开发中起着举足经重的作用。在MFC中,消息是通过一个上递交的方式进行处理,例如WM_COMMAND消息的处理流程可能是:
(1)MDI主容器(CMDIFrameWnd)收到命令消息WM_COMMAND,其ID位ID_XXX;
(2)MDI主窗口将消息传给当前活动的MDI子窗口(CMDIChildWnd)
(3)MDI子窗口给自己的子窗口(View)一个处理机会,将消息交给View;
(4)View检查自己Message Map;
(5)如果View没有发现处理该消息的程序,则将该消息传给其对应的Documet对象;否则View处理,消息流程结束。
(6)Document检查自己Message Map,如果没有该消息的处理程序,则将该消息传给其对象的DocumentTemplate处理;否则自己处理,消息流程结束;
(7)如果在(6)中消息没有得到处理,则将消息返回给View。
(8)View再传回给MDI窗口
(9)MDI子窗口将该消息传给CwinApp对象,CwinApp为所有无主的消息提供了处理。
结构图

该模式比较简单,讲述的是消息传递的原型例子。
Chain of Responsibility 模式的最大的一个有点就是给系统降低了耦合性, 请求的发送者完全不必知道该请求会被哪个应答对象处理,极大地降低了系统的耦合性
网友评论