责任链的常见用法是什么?

时间:2013-08-23 15:48:13

标签: chain-of-responsibility

我看到一个教程视频解释了责任链设计模式,我想我明白它是如何工作的,但我不确定我什么时候会真正使用它。责任链有哪些常见用法?

1 个答案:

答案 0 :(得分:2)

来自GoF

  

已知用途

     

几个类库使用责任链   模式来处理用户事件。他们使用不同的名称   处理程序类,但想法是一样的:当用户点击时   鼠标或按键,一个事件生成并传递   链。 MacApp [App89]和ET ++ [WGM88]称之为“EventHandler”   赛门铁克的TCL库[Sym93b]称其为“官僚”和NeXT   AppKit [Add94]使用名称“Responder。”

     

图形编辑器的Unidraw框架定义了Command对象   将请求封装到Component和ComponentView对象   [VL90]。命令是组件或组件的意义上的请求   组件视图可以解释执行操作的命令。这个   对应于中描述的“作为对象的请求”方法   实现。组件和组件视图可以是结构化的   分层。组件或组件视图可以转发命令   对其父母的解释,而父母可以将其转发给它   父母等等,从而形成责任链。

     

ET ++使用责任链来处理图形更新。一个   只要必要,图形对象就会调用InvalidateRect操作   更新其外观的一部分。图形对象无法处理   InvalidateRect本身,因为它对它的了解不够   上下文。例如,图形对象可以包含在对象中   像Scrollers或Zoomers一样改变它的坐标系。那   表示对象可能会滚动或缩放,因此它是部分的   不合时宜。因此InvalidateRect的默认实现   将请求转发给封闭容器对象。最后   转发链中的对象是一个Window实例。到...的时候   窗口接收请求,保证失效矩形   要妥善转变。窗口处理InvalidateRect   通知窗口系统界面并请求更新。