package com.company;
import java.lang.invoke.CallSite;
/**
* 责任链设计模式
* 优点:
* 1、请求的发送者和接受者解耦
* 2、可以控制执行顺序
* 3、符合开闭原则和单一职责原则
*/
public class ChainOfResponsibilityTest {
public static void main(String[] args) {
Request request = new Request.RequestBuilder().frequentOk(true).loggendOn(true).build();
RequestFrequentHandler requestFrequentHandler = new RequestFrequentHandler(new LoggingHandler(null));
if(requestFrequentHandler.process(request)){
System.out.println("业务正常处理");
}else{
System.out.println("访问异常");
}
}
}
class Request{
//是否登录
private boolean loggedOn;
//是否频繁访问
private boolean frequentOk;
//是否许可
private boolean isPermits;
//是否包含敏感字
private boolean containsSensitiveWords;
private String requestBody;
public Request(boolean loggedOn, boolean frequentOk, boolean isPermits, boolean containsSensitiveWords) {
this.loggedOn = loggedOn;
this.frequentOk = frequentOk;
this.isPermits = isPermits;
this.containsSensitiveWords = containsSensitiveWords;
}
static class RequestBuilder{
//是否登录
private boolean loggedOn;
//是否频繁访问
private boolean frequentOk;
//是否许可
private boolean isPermits;
//是否包含敏感字
private boolean containsSensitiveWords;
RequestBuilder loggendOn(boolean loggedOn){
this.loggedOn = loggedOn;
return this;
}
RequestBuilder frequentOk(boolean frequentOk){
this.frequentOk = frequentOk;
return this;
}
RequestBuilder isPermits(boolean isPermits){
this.isPermits = isPermits;
return this;
}
RequestBuilder containsSensitiveWords(boolean containsSensitiveWords){
this.containsSensitiveWords = containsSensitiveWords;
return this;
}
public Request build(){
Request request = new Request(loggedOn,frequentOk,isPermits,containsSensitiveWords);
return request;
}
}
public boolean isLoggedOn() {
return loggedOn;
}
public boolean isPermits() {
return isPermits;
}
public boolean isFrequentOk() {
return frequentOk;
}
public boolean isContainsSensitiveWords() {
return containsSensitiveWords;
}
}
abstract class Handler{
Handler next;
public Handler(Handler next){
this.next = next;
}
public Handler getNext() {
return next;
}
public void setNext(Handler next) {
this.next = next;
}
abstract boolean process(Request request);
}
class RequestFrequentHandler extends Handler{
public RequestFrequentHandler(Handler next) {
super(next);
}
@Override
boolean process(Request request) {
System.out.println("访问频率控制。");
if(request.isFrequentOk()){
Handler next = getNext();
if(null == next){
return true;
}
if(!next.process(request)){
return false;
}else{
return true;
}
}
return false;
}
}
class LoggingHandler extends Handler{
public LoggingHandler(Handler next) {
super(next);
}
@Override
boolean process(Request request) {
System.out.println("登录验证。");
if(request.isLoggedOn()){
Handler next = getNext();
if(null == next){
return true;
}
if(!next.process(request)){
return false;
}else{
return true;
}
}
return false;
}
}
原文:https://www.cnblogs.com/rainbow--/p/14503431.html