责任链,火车一样,一节一节串起来。类似
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