下边是我设计的一个简单模式,非常好理解,不过需要你动手自己敲一下,你会发现这种设计模式非常巧妙,hashMap的源码设计也是这种方式
责任链就是 ,连续发生的一整套逻辑在触发时,依次按步骤执行.(这种功能你会说新人也能实现干嘛非要这么写,这就是牛人和非牛的区别,要想成为他们就要需要试着理解领悟他们.)
首先定义一个 公共的抽象类
package com.jxd.springbootstrategy.handler; import org.springframework.scheduling.annotation.Async; /** * 责任链设计模式 */ public abstract class GatewayHandler { private GatewayHandler gatewayHandler; /** * 使用抽象类定义共同方法的行为 */ public abstract void service(); public void nextService(){ if(null!=gatewayHandler){ gatewayHandler.service(); } } /** * * 同一个父类 * @param gatewayHandler */ public void setNextGatewayHandler(GatewayHandler gatewayHandler) { this.gatewayHandler = gatewayHandler; } 接下来定义每一个步骤的具体实现 我们这里有三步.
public class CurrentLimitHandler extends GatewayHandler{ @Override public void service() { System.out.println("第一步 >> API接口的限流..."); nextService(); } }
public class BlackListHandler extends GatewayHandler{ @Override public void service() { System.out.println("第二步 >> 黑名单拦截..."); nextService(); } }
public class ConversationHandler extends GatewayHandler{ @Override public void service() { System.out.println("第三步 >> 用户会话拦截..."); } }
具体调用 我们放到工厂里边 每次去工厂去调用
public class FactoryHandler { public static CurrentLimitHandler getCurrentLimitHandler() { CurrentLimitHandler currentLimitHandler = new CurrentLimitHandler(); BlackListHandler blackListHandler = new BlackListHandler(); ConversationHandler conversationHandler = new ConversationHandler(); currentLimitHandler.setNextGatewayHandler(blackListHandler); blackListHandler.setNextGatewayHandler(conversationHandler); return currentLimitHandler; } public static void main(String[] args) { FactoryHandler.getCurrentLimitHandler().service(); } }
看下一执行的结果,你可以用这种方法展开无尽想象
}