type
status
date
slug
summary
tags
category
icon
password
责任链模式
责任链模式,亦称职责链模式、命令链,是一种行为设计模式,允许你将请求沿着处理者链进行发送。收到请求后,每个处理者均可对请求进行处理,或将其传递给链上的下个处理者。
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F87cd7b33-b48f-404a-8322-8403322877a9%2F66a50b51-7d0c-427e-b46f-79b9f566e29c%2FUntitled.png?table=block&id=2b22fa90-2a15-49a5-8b77-32d85e6658b3&t=2b22fa90-2a15-49a5-8b77-32d85e6658b3&width=1280&cache=v2)
责任链模式结构
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F87cd7b33-b48f-404a-8322-8403322877a9%2F8e04f2b4-4d9c-4f5d-952a-d790e33cced5%2FUntitled.png?table=block&id=2d83088b-ae1d-44d9-8271-22f23921dd14&t=2d83088b-ae1d-44d9-8271-22f23921dd14&width=1857&cache=v2)
- 处理者(Handler)声明了所有具体处理者的通用接口。该接口通常仅包含单个方法用于请求处理,但有时其还会包含一个设置链上下个处理者的方法。
- 基础处理者(Base Handler)是一个可选的类,你可以将所有处理者共用的样本代码放置在其中。通常情况下,该类中定义了一个保存对于下个处理者引用的成员变量。 客户端可通过将处理者传递给上个处理者的构造函数或设定方法来创建链。该类还可以实现默认的处理行为:确定下个处理者存在后再将请求传递给它。
- 具体处理者(Concrete Handlers)包含处理请求的实际代码。每个处理者接收到请求后,都必须决定是否进行处理,以及是否沿着链传递请求。处理者通常是独立且不可变的,需要通过构造函数一次性地获得所有必要地数据。
- 客户端(Client)可根据程序逻辑一次性或者动态地生成链。值得注意的是,请求可发送给链上的任意一个处理者,而非必须是第一个处理者。
责任链模式通用代码:
责任链模式适用场景
- 如果你需要通过操作来参数化对象,可使用命令模式。
识别方法:
责任链模式优缺点
责任链模式优点:
- 单一职责原则。你可以解耦触发和执行操作的类。
责任链模式缺点:
- 代码可能会变得更加复杂,因为你在发送者和接收者之间增加了一个全新的层次。
练手题目
题目描述
小明去奶茶店买奶茶,他可以通过在自助点餐机上来点不同的饮品,请你使用命令模式设计一个程序,模拟这个自助点餐系统的功能。
输入描述
第一行是一个整数 n(1 ≤ n ≤ 100),表示点单的数量。接下来的 n 行,每行包含一个字符串,表示点餐的饮品名称。
输出描述
输出执行完所有点单后的制作情况,每行输出一种饮品的制作情况。如果制作完成,输出 "XXX is ready!",其中 XXX 表示饮品名称。
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F87cd7b33-b48f-404a-8322-8403322877a9%2F9240fa80-db03-4162-927c-7f9c7045d649%2FUntitled.png?table=block&id=3e575dc7-dd8a-4782-8d22-5490d26b4a58&t=3e575dc7-dd8a-4782-8d22-5490d26b4a58&width=760&cache=v2)
题解
解法一:
解法二:
解法三:命令模式+工厂模式
欢迎您在底部评论区留言,一起交流~
- 作者:Nolan
- 链接:https://nolanblog.top/article/DP10
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。