责任链模式Java+Spring实现
生活随笔
收集整理的這篇文章主要介紹了
责任链模式Java+Spring实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
業務場景
一般的操作校驗接口有參數校驗、安全校驗、黑名單校驗、操作規則等等。
問題
常見同步編寫code,校驗失敗return,代碼鏈路較長,修改不符合開閉原則。
責任鏈模式定義
責任鏈模式為請求創建了一個接收者對象的鏈。執行鏈上有多個對象節點,每個對象節點都有機會(條件匹配)處理請求事務,如果某個對象節點處理完了,就可以根據實際業務需求傳遞給下一個節點繼續處理或者返回處理完畢。這種模式給予請求的類型,對請求的發送者和接收者進行解耦。
責任鏈模式使用
-
一個接口或者抽象類
-
每個對象差異化處理
-
對象鏈(數組)初始化(連起來)
責任鏈模式實現
抽象類:
-
有一個指向責任下一個對象的屬性
-
一個設置下一個對象的set方法
-
給子類對象差異化實現的方法
每個對象處理
即各種校驗場景
/*** 參數校驗對象**/ @Component @Order(1) //順序排第1,最先校驗 public class CheckParamFilterObject extends AbstractCheckHandler {@Overridepublic void doFilter(Request request, Response response) {System.out.println("非空參數檢查");} }/*** 安全校驗對象*/ @Component @Order(2) //校驗順序排第2 public class CheckSecurityFilterObject extends AbstractCheckHandler {@Overridepublic void doFilter(Request request, Response response) {//invoke Security checkSystem.out.println("安全調用校驗");} }/*** 黑名單校驗對象*/ @Component @Order(3) //校驗順序排第3 public class CheckBlackFilterObject extends AbstractCheckHandler {@Overridepublic void doFilter(Request request, Response response) {//invoke black list checkSystem.out.println("校驗黑名單");} }對象處理責任鏈實現
@Component public class RequestCheckHandlerChain {/*** 自動注入各個責任鏈的對象*/@Autowiredprivate List<AbstractCheckHandler> abstractHandleList;private AbstractCheckHandler abstractHandler;//spring注入后自動執行,責任鏈的對象連接起來@PostConstructpublic void initializeChainFilter() {for (int i = 0; i < abstractHandleList.size(); i++) {if (i == 0) {abstractHandler = abstractHandleList.get(0);} else {AbstractCheckHandler currentHander = abstractHandleList.get(i - 1);AbstractCheckHandler nextHander = abstractHandleList.get(i);currentHander.setNextHandler(nextHander);}}}//調用執行使用public Response exec(Request request, Response response) {abstractHandler.filter(request, response);return response;}public AbstractCheckHandler getAbstractHandler() {return abstractHandler;}public void setAbstractHandler(AbstractCheckHandler abstractHandler) {this.abstractHandler = abstractHandler;} }調用
@Autowired private RequestCheckHandlerChain requestCheckHandlerChain;...requestCheckHandlerChain.exec(request, response);End
總結
以上是生活随笔為你收集整理的责任链模式Java+Spring实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NNG 通信模式
- 下一篇: java美元兑换,(Java实现) 美元