设计模式-责任链, 责任链+ 模板方法模式相结合

发布于:2025-07-04 ⋅ 阅读:(14) ⋅ 点赞:(0)

责任链,火车一样,一节一节串起来。类似
a.setNext(b);
b.setNext©;
c.setNext(d);

这里以多步校验做举例,正常方法中要写好多个if else

定义一个接口

package com.example.chain;


/**
 * 订单校验
 *
 */
public interface OrderCreateValidator {
   

    /**
     * 设置下一个校验器
     *
     * @param nextValidator
     */
    public void setNext(OrderCreateValidator nextValidator);

    public OrderCreateValidator getNext();

    /**
     * 校验
     *
     * @param request
     * @throws OrderException 订单异常
     */
    public void validate(OrderCreateRequest request) throws OrderException;
}

类实现接口

package com.example.chain.orgin;

import com.example.chain.OrderCreateRequest;
import com.example.chain.OrderCreateValidator;
import com.example.chain.OrderException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserValidator2 implements OrderCreateValidator {
   

    private OrderCreateValidator nextValidator;

    @Override
    public void setNext(OrderCreateValidator next) {
   
        this.nextValidator = next;
    }

    @Override
    public OrderCreateValidator getNext() {
   
        return nextValidator;
    }

    @Override
    public void validate(OrderCreateRequest request) throws OrderException {
   
        System.out.println("UserValidator doValidate");
    }

}
package com.example.chain.orgin;

import com.example.chain.OrderCreateRequest;
import com.example.chain.OrderCreateValidator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class Goo