责任链的常见用法?

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 通过 通知窗口系统界面并请求更新。

【讨论】:

以上是关于责任链的常见用法?的主要内容,如果未能解决你的问题,请参考以下文章

基于双向责任链的接口设计

基于双向责任链的接口设计

模拟javaWeb责任链的设计

一个搞定责任链的注解

Android 责任链设计模式学习应用实例

5 行为型模式之- 责任链模式