Chain of Responsibility模式(行为型)

问题

熟悉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 模式的最大的一个有点就是给系统降低了耦合性, 请求的发送者完全不必知道该请求会被哪个应答对象处理,极大地降低了系统的耦合性

你可能感兴趣的:(Chain of Responsibility模式(行为型))