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

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;

}

}

标签:return,frequentOk,建造,模式,next,链表,boolean,Handler,public

来源: https://www.cnblogs.com/rainbow--/p/14503431.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值