责任链模式
介绍
客户端发出一个请求,链上的对象都有机会来处理这一请求,而客户端不需要知道谁是具体的处理对象;
让多个对象都有机会处理请求,避免请求者和接收者之间的耦合关系;
有两个核心点:处理请求,将请求传递到下一个节点。
应用场景
Tomcat对encoding编码处理,SpringBoot里面的拦截器、过滤器链;
如果有多个对象可以处理同一个请求,但具体由哪个对象处理是由运行时刻动态决定的,这种情况可以使用责任链模式。
角色
Handler抽象处理者:定义了一个处理请求的接口;
ConcreteHandler具体处理者:负责处理具体请求,以及访问后续节点;
优点
客户只需要将请求发送到责任链上即可,无需关心具体的实现细节;
改变链内的调动他们的次序,允许动态的增加或删除处理类;
符合开闭原则,可以根据需要增加请求处理类;
满足单一职责原则,每个类只负责自己的工作;
缺点
每个对象功能单一,如果逻辑复杂,则需要产生很多职责对象,会产生大量的细粒度职责对象;
不能保证请求一定被接收,如果链路较长会影响系统性能,代码调试时也不太方便;