springboot責(zé)任鏈模式實(shí)現(xiàn)多級校驗(yàn)
責(zé)任鏈模式是將鏈中的每一個(gè)節(jié)點(diǎn)看作是一個(gè)對象,每個(gè)節(jié)點(diǎn)處理的請求不同,且內(nèi)部自動(dòng)維護(hù)一個(gè)下一節(jié)點(diǎn)對象。
當(dāng)一個(gè)請求從鏈?zhǔn)降氖锥伟l(fā)出時(shí),會(huì)沿著鏈的路徑依此傳遞給每一個(gè)節(jié)點(diǎn)對象,直至有對象處理這個(gè)請求為止。
屬于行為型模式。
1、定義處理器接口
@Data @AllArgsConstructor @NoArgsConstructor @Builder public class Order { private Integer creditScore; private Integer quantity; }
public interface OrderHandler { boolean handle(Order order); }
2、實(shí)現(xiàn)不同的校驗(yàn)處理器
信用校驗(yàn)處理器:
@Component public class CreditHandler implements OrderHandler{ @Override public boolean handle(Order order) { if (order.getCreditScore() % 2 != 0){ System.out.println("信用不足"); return false; } return true; } }
庫存校驗(yàn)處理器:
@Component public class StockHandler implements OrderHandler{ @Override public boolean handle(Order order) { if (order.getQuantity() > 20){ System.out.println("庫存不足"); return false; } return true; } }
3、責(zé)任鏈管理器
@Component public class OrderHandlerChain { private final List<OrderHandler> handlers; public OrderHandlerChain(List<OrderHandler> handlers){ this.handlers = handlers; } public boolean process(Order order){ for (OrderHandler handler : handlers) { if (!handler.handle(order)){ return false; } } return true; } }
4、服務(wù)類調(diào)用責(zé)任鏈
@Component public class OrderService { private final OrderHandlerChain handlerChain; private OrderService(OrderHandlerChain handlerChain){ this.handlerChain = handlerChain; } public boolean processOrder(Order order){ boolean process = handlerChain.process(order); if (process){ System.out.println("校驗(yàn)成功"); } return process; } }
5、測試
@SpringBootTest public class OrderServiceTest { @Autowired private OrderService orderService; @Test public void testOrderProcess(){ Order order = new Order(2, 5); orderService.processOrder(order); Order order1 = new Order(2, 5); orderService.processOrder(order1); Order order2 = new Order(2, 21); orderService.processOrder(order2); } }
6、優(yōu)點(diǎn)
解耦邏輯:每個(gè)校驗(yàn)邏輯獨(dú)立實(shí)現(xiàn),符合單一職責(zé)原則
靈活擴(kuò)展:新增校驗(yàn)只需添加新的Handler實(shí)現(xiàn)類,無需修改現(xiàn)有代碼
支持動(dòng)態(tài)調(diào)整:可通過調(diào)整List的順序來改變校驗(yàn)順序
利用Spring自動(dòng)裝配:使用Spring的依賴注入簡化責(zé)任鏈構(gòu)建
到此這篇關(guān)于springboot責(zé)任鏈模式實(shí)現(xiàn)多級校驗(yàn)的文章就介紹到這了,更多相關(guān)springboot多級校驗(yàn)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MyBatis 實(shí)現(xiàn)批量插入和刪除中雙層循環(huán)的寫法案例
這篇文章主要介紹了MyBatis 實(shí)現(xiàn)批量插入和刪除中雙層循環(huán)的寫法案例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01Maven中兩個(gè)命令clean 和 install的使用
Maven是一個(gè)項(xiàng)目管理和自動(dòng)構(gòu)建工具,clean命令用于刪除項(xiàng)目中由先前構(gòu)建生成的target目錄,install命令用于將打包好的jar包安裝到本地倉庫中,供其他項(xiàng)目依賴使用,下面就來詳細(xì)的介紹一下這兩個(gè)命令2024-09-09springboot項(xiàng)目以jar包運(yùn)行的操作方法
公司一個(gè)springboot項(xiàng)目本來是打war包的,突然要改為打jar包,不知所措了,糾結(jié)該如何操作呢,折騰半天終于搞定了,下面把解決方案分享給大家,對springboot打jar包方式感興趣的朋友一起看看吧2021-06-06IDEA報(bào)錯(cuò):java:無效的源發(fā)行版21解決方式
這篇文章主要給大家介紹了關(guān)于IDEA報(bào)錯(cuò):java:無效的源發(fā)行版21的解決方式,這個(gè)錯(cuò)誤是因?yàn)槟愕捻?xiàng)目使用的Java版本與你的IDEA使用的Java版本不一致導(dǎo)致的,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2024-06-06關(guān)于easyExcel中讀取Excel表頭的實(shí)例說明
EasyExcel是阿里巴巴開源的一個(gè)excel處理框架,以使用簡單、節(jié)省內(nèi)存著稱,下面這篇文章主要給大家介紹了關(guān)于easyExcel中讀取Excel表頭的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06Java中的LinkedHashMap及LRU緩存機(jī)制詳解
這篇文章主要介紹了Java中的LinkedHashMap及LRU緩存機(jī)制詳解,LinkedHashMap繼承自HashMap,它的多種操作都是建立在HashMap操作的基礎(chǔ)上的,同HashMap不同的是,LinkedHashMap維護(hù)了一個(gè)Entry的雙向鏈表,保證了插入的Entry中的順序,需要的朋友可以參考下2023-09-09Spring BeanFactory和FactoryBean區(qū)別解析
這篇文章主要介紹了Spring BeanFactory和FactoryBean區(qū)別解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03Java實(shí)現(xiàn)簡單文字驗(yàn)證碼以及人機(jī)驗(yàn)證
人機(jī)驗(yàn)證技術(shù)的發(fā)展也在不斷進(jìn)化,從最初的簡單驗(yàn)證碼到現(xiàn)在的人工智能驅(qū)動(dòng)的高級驗(yàn)證系統(tǒng),下面這篇文章主要介紹了Java實(shí)現(xiàn)簡單文字驗(yàn)證碼以及人機(jī)驗(yàn)證的相關(guān)資料,需要的朋友可以參考下2025-04-04