下邊是我設計的一個簡單模式,非常好理解,不過需要你動手自己敲一下,你會發現這種設計模式非常巧妙,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(); } }
看下一執行的結果,你可以用這種方法展開無盡想象
}