1. 基本概念
责任链模式是一种行为型设计模式,它允许你构建一个对象链,让请求从链的一端进入,然后沿着链上的对象依次处理,直到链上的某个对象能够处理该请求为止。
2. 组成结构
责任链模式包括以下几个基本结构:
- 处理者
Handler
:定义一个处理请求的接口,包含一个处理请求的抽象方法和一个指向下一个处理者的链接。
- 具体处理者
ConcreteHandler
: 实现处理请求的方法,并判断能否处理请求,如果能够处理请求则进行处理,否则将请求传递给下一个处理者。
- 客户端:创建并组装处理者对象链,并将请求发送到链上的第一个处理者。
3. 简易实现
- 处理者:定义处理请求的接口
1 2 3 4 5 6
| interface Handler { void handleRequest(double amount); void setNextHandler(Handler nextHandler); }
|
- 具体处理者:实现处理请求
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| class ConcreteHandler implements Handler { private Handler nextHandler;
@Override public void handleRequest(Request request) { if (canHandle(request)) { } else if (nextHandler != null) { nextHandler.handleRequest(request); } else { } } @Override public void setNextHandler(Handler nextHandler) { this.nextHandler = nextHandler; }
private boolean canHandle(Request request) { return ; } }
|
- 客户端创建并组装处理者对象链,将请求发送给链上第一个处理者
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| public class Main { public static void main(String[] args) { Handler handler1 = new ConcreteHandler(); Handler handler2 = new ConcreteHandler();
handler1.setNextHandler(handler2);
Request request = new Request(); handler1.handleRequest(request); } }
|
4. 使用场景
责任链模式具有下面几个优点:
- 降低耦合度:将请求的发送者和接收者解耦,每个具体处理者都只负责处理与自己相关的请求,客户端不需要知道具体是哪个处理者处理请求。
- 增强灵活性:可以动态地添加或删除处理者,改变处理者之间的顺序以满足不同需求。
但是由于一个请求可能会经过多个处理者,这可能会导致一些性能问题,并且如果整个链上也没有合适的处理者来处理请求,就会导致请求无法被处理。
责任链模式是设计模式中简单且常见的设计模式,在日常中也会经常使用到,比如Java开发中过滤器的链式处理,以及Spring框架中的拦截器,都组装成一个处理链对请求、响应进行处理。