责任链的常见用法?
我看到一个教程视频解释了责任链设计模式,我想我明白它是如何工作的,但我不确定何时会真正使用它。 责任链的一些常见用法是什么?
来自GoF:
已知用途
几个类库使用责任链模式来处理用户事件。 它们对Handler类使用不同的名称,但想法相同:当用户单击鼠标或按下某个键时,会生成一个事件并沿链传递。 MacApp [App89]和ET ++ [WGM88]称之为“EventHandler”,赛门铁克的TCL库[Sym93b]称其为“官僚主义者”,而NeXT的AppKit [Add94]使用名称“Responder”。
图形编辑器的Unidraw框架定义了将请求封装到Component和ComponentView对象的Command对象[VL90]。 命令是请求,意思是组件或组件视图可以解释命令来执行操作。 这对应于Implementation中描述的“作为对象的请求”方法。 组件和组件视图可以分层结构。 组件或组件视图可以将命令解释转发给它的父节点,这又可以将其转发给它的父节点,等等,从而形成责任链。
ET ++使用责任链来处理图形更新。 一旦图形对象必须更新其部分外观,图形对象就会调用InvalidateRect操作。 图形对象本身不能处理InvalidateRect,因为它不了解其上下文。 例如,一个图形对象可以包含在Scroller或Zoomers等对象中,用于转换它的坐标系。 这意味着该对象可能会滚动或缩放,以至于它的一部分看不到。 因此,InvalidateRect的默认实现将请求转发给封闭的容器对象。 转发链中的最后一个对象是一个Window实例。 到窗口收到请求时,无效矩形保证被正确转换。 窗口通过通知窗口系统接口并请求更新来处理InvalidateRect。
链接地址: http://www.djcxy.com/p/76549.html上一篇: Common usages for chain of responsibility?
下一篇: Why would I ever use a Chain of Responsibility over a Decorator?