springboot責任鏈模式實現(xiàn)多級校驗
責任鏈模式是將鏈中的每一個節(jié)點看作是一個對象,每個節(jié)點處理的請求不同,且內部自動維護一個下一節(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、服務類調用責任鏈
@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)調整:可通過調整List的順序來改變校驗順序
利用Spring自動裝配:使用Spring的依賴注入簡化責任鏈構建
到此這篇關于springboot責任鏈模式實現(xiàn)多級校驗的文章就介紹到這了,更多相關springboot多級校驗內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
詳細說明關于Java的數(shù)據(jù)庫連接(JDBC)
這篇文章主要介紹了詳細說明關于Java的數(shù)據(jù)庫連接JDBC,JDBC是用Java語言向數(shù)據(jù)庫發(fā)送SQL語句,需要的朋友可以參考下面文章內容2021-09-09
Logger.getLogger()與LogFactory.getLog()的區(qū)別詳解
LogFactory來自common-logging包。如果用LogFactory.getLog,你可以用任何實現(xiàn)了通用日志接口的日志記錄器替換log4j,而程序不受影響2013-09-09
為什么不建議使用Java自定義Object作為HashMap的key
這篇文章主要介紹了為什么不建議使用Java自定義Object作為HashMap的key,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,感興趣的小伙伴可以參考一下2022-06-06

