一,责任链模式
责任链模式:
- 多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将对象连成一个链,沿着这个链传递请求,直到请求被处理或链结束;
- 为请求创建一个接收者对象的链,对请求的发送者和接收者进行解耦;
- 责任链的每个接收者都包含对另一个接收者的引用,如果一个对象不能处理该请求,则会把该请求传递给下一个接收者,依次类推;
二,原理类图
意图: 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
适用性:
有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。
你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。
可处理一个请求的对象集合应被动态指定。
三,实例
Handler: 抽象处理者,定义一个处理请求的接口,同时含有另一个Handler
package com.neei.chain;
/**
* @param
* @Author: AaNeei
* @Date: 2019/10/18 23:16
* @Description: 游学网
* @throws:
*/
public abstract class Approver {
/**
* 下一个接收者
*/
Approver approver;
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Approver(String name) {
this.name = name;
}
public void setApprover(Approver approver) {
this.approver = approver;
}
public abstract void processRequest(PurchaseRequest request);
}
ConcreteHandler: 处理自己负责的请求,同时可以访问下一个处理者,如果可以处理当前请求,则处理,否则就将该请求交个后继者处理,从而形成一个链
public class DepartmentApprover extends Approver {
public DepartmentApprover(String name) {
super(name);
}
@Override
public void processRequest(PurchaseRequest request) {
if (request.getPrice() <= 5000) {
System.out.println("请求id=" + request.getId() + ",已被" + this.name + "处理了。。。");
return;
}
approver.processRequest(request);
}
}
public class CollegeApprover extends Approver {
public