1.模式定义:
为请求创建了一个接收者对象的链。
如请求频率、登录认证、授权认证、敏感词过滤等操作,就跟gateway网关登录授权过滤判断一样。
class Request{ //这里简单做数据模拟public boolean isLogin; //是否登录了public boolean isFrequentOk; //是否符合调用频率public boolean isToken; //token认证public Request(boolean isLogin,boolean isFrequentOk,boolean isToken){this.isLogin = isLogin;this.isFrequentOk = isFrequentOk;this.isToken = isToken;}}abstract class Handler{public Handler next;public Handler(Handler next) {this.next = next;}abstract boolean process(Request request);}class RequestFrequentHandler extends Handler{public RequestFrequentHandler(Handler next) {super(next);}@Overrideboolean process(Request request) {System.out.println("进行访问频率控制");if(request.isFrequentOk){if(next == null){return true;}if(!next.process(request)){return false;}else{return true;}}return false;}}class LoginHandler extends Handler{public LoginHandler(Handler next) {super(next);}@Overrideboolean process(Request request) {System.out.println("进行登录判断");if(request.isLogin){if(next == null){return true;}if(!next.process(request)){return false;}else{return true;}}return false;}}class TokenHandler extends Handler{public TokenHandler(Handler next) {super(next);}@Overrideboolean process(Request request) {System.out.println("进行token认证");if(request.isToken){if(next == null){return true;}if(!next.process(request)){return false;}else{return true;}}return false;}}public class ChainOfResponsibility {public static void main(String[] args) {Request request = new Request(true, true, true);RequestFrequentHandler requestFrequentHandler = new RequestFrequentHandler(new LoginHandler(new TokenHandler(null)));if(requestFrequentHandler.process(request)){System.out.println("访问正常");}else{System.out.println("访问异常");}}}

2.应用场景:
一个请求的处理需要多个对象当中的一个或几个协作处理。
优点:
1.请求的发送者和接受者解耦
2.可以控制执行顺序
3.符合开闭原则和单一职责原则
3.经典案例
1javax.servlet.Filter2javax.servlet.FilterChain
