责任链的常见用法?
Posted
技术标签:
【中文标题】责任链的常见用法?【英文标题】:Common usages for chain of responsibility? 【发布时间】:2013-08-26 17:55:25 【问题描述】:我看了一个解释责任链设计模式的教程视频,我想我理解它是如何工作的,但我不确定我什么时候会真正使用它。责任链的常见用法有哪些?
【问题讨论】:
【参考方案1】:来自GoF:
已知用途
几个类库使用责任链 模式来处理用户事件。他们使用不同的名称 Handler类,但是思路是一样的:当用户点击 鼠标或按键,将生成一个事件并沿 链。 MacApp [App89] 和 ET++ [WGM88] 称之为“EventHandler” Symantec 的 TCL 库 [Sym93b] 称其为“Bureaucrat”,而 NeXT 的 AppKit [Add94] 使用名称“Responder”。
图形编辑器的 Unidraw 框架定义了 Command 对象 封装对 Component 和 ComponentView 对象的请求 [VL90]。从某种意义上说,命令是组件或请求 组件视图可以解释命令以执行操作。这 对应于中描述的“请求作为对象”方法 执行。组件和组件视图可以结构化 分层的。组件或组件视图可以转发命令 解释给它的父母,这可能反过来将它转发给它的 以此类推,从而形成责任链。
ET++ 使用责任链来处理图形更新。一种 图形对象在必要时调用 InvalidateRect 操作 更新其外观的一部分。图形对象无法处理 InvalidateRect 本身,因为它对它的了解不够 语境。例如,图形对象可以包含在对象中 比如转换其坐标系的滚动器或缩放器。那 表示对象可能被滚动或缩放以使其部分 视线之外。因此 InvalidateRect 的默认实现 将请求转发到封闭的容器对象。最后 转发链中的对象是一个 Window 实例。到...的时候 Window接收请求,保证失效矩形 进行适当的改造。窗口处理 InvalidateRect 通过 通知窗口系统界面并请求更新。
【讨论】:
以上是关于责任链的常见用法?的主要内容,如果未能解决你的问题,请参考以下文章