首页 > 其他 > 详细

建造者模式和责任链模式链表实现

时间:2021-03-09 09:24:45      阅读:31      评论:0      收藏:0      [点我收藏+]
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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!