springboot責任鏈模式實現(xiàn)多級校驗
責任鏈模式是將鏈中的每一個節(jié)點看作是一個對象,每個節(jié)點處理的請求不同,且內(nèi)部自動維護一個下一節(jié)點對象。
當一個請求從鏈式的首段發(fā)出時,會沿著鏈的路徑依此傳遞給每一個節(jié)點對象,直至有對象處理這個請求為止。
屬于行為型模式。
1、定義處理器接口
@Data @AllArgsConstructor @NoArgsConstructor @Builder public class Order { private Integer creditScore; private Integer quantity; }
public interface OrderHandler { boolean handle(Order order); }
2、實現(xià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; } }
庫存校驗處理器:
@Component public class StockHandler implements OrderHandler{ @Override public boolean handle(Order order) { if (order.getQuantity() > 20){ System.out.println("庫存不足"); return false; } return true; } }
3、責任鏈管理器
@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)用責任鏈
@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("校驗成功"); } 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)點
解耦邏輯:每個校驗邏輯獨立實現(xiàn),符合單一職責原則
靈活擴展:新增校驗只需添加新的Handler實現(xiàn)類,無需修改現(xiàn)有代碼
支持動態(tài)調(diào)整:可通過調(diào)整List的順序來改變校驗順序
利用Spring自動裝配:使用Spring的依賴注入簡化責任鏈構(gòu)建
到此這篇關(guān)于springboot責任鏈模式實現(xiàn)多級校驗的文章就介紹到這了,更多相關(guān)springboot多級校驗內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MyBatis 實現(xiàn)批量插入和刪除中雙層循環(huán)的寫法案例
這篇文章主要介紹了MyBatis 實現(xiàn)批量插入和刪除中雙層循環(huán)的寫法案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01關(guān)于easyExcel中讀取Excel表頭的實例說明
EasyExcel是阿里巴巴開源的一個excel處理框架,以使用簡單、節(jié)省內(nèi)存著稱,下面這篇文章主要給大家介紹了關(guān)于easyExcel中讀取Excel表頭的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-06-06Spring BeanFactory和FactoryBean區(qū)別解析
這篇文章主要介紹了Spring BeanFactory和FactoryBean區(qū)別解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-03-03