【设计模式】行为模式:责任链模式

意图

责任链模式是一种行为设计模式,允许你将请求沿着处理者链进行发送。收到请求后,每个处理者均可对请求进行处理,或将其传递给链上的下个处理者。

作用1:筛选

假如你正在开发一个在线订购系统。你希望对系统访问进行限制,只允许认证用户创建订单。此外拥有管理权限的用户也拥有所有订单的完全访问权限。
责任链会将特定行为转换为被称作处理者的独立对象。将每个检查步骤都可被抽取为仅有单个方法的类,并执行检查操作。请求及其数据则会被作为参数传递给该方法。
将这些处理者连成一条链。链上的每个处理者都有一个成员变量来保存对于下一处理者的引用。除了处理请求外,处理者还负责沿着链传递请求。请求会在链上移动,直至所有处理者都有机会对其进行处理。这样做的好处是处理者可以决定不再沿着链传递请求,这可高效地取消所有后续处理步骤。
处理者依次排列, 组成一条链

作用2:实现不同方式处理不同种类请求

处理者接收到请求后自行决定是否能够对其进行处理。如果自己能够处理,处理者就不再继续传递请求。因此在这种情况下,每个请求要么最多有一个处理者对其进行处理,要么没有任何处理者对其进行处理。在处理图形用户界面元素栈中的事件时,这种方式非常常见。
当用户点击按钮时,按钮产生的事件将沿着 GUI 元素链进行传递,最开始是按钮的容器(如窗体或面板),直至应用程序主窗口。链上第一个能处理该事件的元素会对其进行处理。此外,该例还有另一个值得我们关注的地方:它表明我们总能从对象树中抽取出链来。
对象树的枝干可以组成一条链

责任链模式结构

责任链模式结构

小结

适合应用场景

  • 当程序需要使用不同方式处理不同种类请求, 而且请求类型和顺序预先未知时, 可以使用责任链模式。

  • 当必须按顺序执行多个处理者时, 可以使用该模式。

  • 如果所需处理者及其顺序必须在运行时进行改变, 可以使用责任链模式。

优点

  • 可以控制请求处理的顺序。

  • 单一职责原则。你可对发起操作和执行操作的类进行解耦。

  • 开闭原则。你可以在不更改现有代码的情况下在程序中新增处理者。

缺点

  • 部分请求可能未被处理。

参考

22种设计模式:refactoringguru.cn/design-patterns
《设计模式:可复用面向对象软件的基础》

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值