责任链是一种行为设计模式, 允许你将请求沿着处理者链进行发送, 直至其中一个处理者对其进行处理。
该模式允许多个对象来对请求进行处理, 而无需让发送者类与具体接收者类相耦合。 链可在运行时由遵循标准处理者接口的任意处理者动态生成。
复杂度:
流行度:
使用示例: 责任链模式在 Java 程序中并不常见, 因为它仅在代码与对象链打交道时才能发挥作用。
该模式最流行的使用案例之一是在 GUI 类中将事件向上传递给父组件。 另一个值得注意的使用案例是依次访问过滤器。
下面是该模式在核心 Java 程序库中的一些示例:
识别方法: 该模式可通过一组对象的行为方法间接调用其他对象的相同方法来识别, 而且所有对象都会遵循相同的接口。
过滤访问
本例展示了包含用户数据的请求如何依次通过处理者链来执行各种不同的行为 (例如认证、 授权与验证)。
本例与许多作者给出的该模式的标准版本有些不同。 绝大多数模式示例都会寻找正确的处理者, 并在处理后退出链。 但在这里我们会执行每个处理者, 直至某个处理者无法处理请求。 请注意, 尽管流程略有不同, 但这仍是责任链模式。
middleware
middleware/Middleware.java: 基础验证接口
middleware/ThrottlingMiddleware.java: 检查请求数量限制
middleware/UserExistsMiddleware.java: 检查用户登录信息
middleware/RoleCheckMiddleware.java: 检查用户角色
server
server/Server.java: 授权目标
Demo.java: 客户端代码
OutputDemo.txt: 执行结果