我看到了一个视频教程讲解责任设计模式的链条,我想我明白它是如何工作,但我不知道,当我真的会使用它。 什么是责任链的一些常见的用法?
Answer 1:
从四人帮 :
已知应用
一些类库使用责任链模式处理用户事件。 他们使用不同的名称将处理程序类,但这个想法是一样的:当用户点击鼠标或按下某个键,获取生成一个事件并沿着链传递。 MacApp [App89]和ET ++ [WGM88]称之为 “事件处理程序,” 赛门铁克的TCL库[Sym93b]称之为 “官僚”,而旁边的了AppKit [Add94]使用的名称 “响应”。
对于图形编辑器的Unidraw框架定义封装了请求组件和的ComponentView对象[VL90]命令对象。 命令是在这个意义上的请求,一个组件或组件视图可以解释的命令执行操作。 这相当于“要求为目标”的实现中描述的方法。 部件和部件视图可以被分级构成的。 一个组件或组件视图可以命令解释转发到它的父,这又会转发给它的父,等等,从而形成责任的链。
ET ++使用责任链来处理图形更新。 一个图形对象调用InvalidateRect操作时,它必须更新其外观的一部分。 图形对象不能自行处理InvalidateRect,因为它没有足够的了解它的背景。 例如,图形对象可以封装在像滚动条或求变该变换其坐标系统对象。 这意味着对象可能滚动或缩放,以便它的部分拿出来看。 因此InvalidateRect的默认实现将请求转发到封闭容器对象。 在转发链的最后一个对象是一个窗口实例。 通过窗口接收到该请求时,无效矩形是保证正确地变换。 该窗口通过通知窗口系统界面和请求更新处理InvalidateRect。
文章来源: Common usages for chain of responsibility?