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

