-
定义模板handler
package com.zj.study.xx; /** * @author Zpain * @date 2023/6/25 16:08 */ public abstract class Handler<T> { protected Handler<T> next; public void setNext(Handler<T> next) { this.next = next; } /** * 执行任务 * @param a */ public abstract void doHandler(T a); public static class Builder<T> { private Handler<T> head; private Handler<T> tail; public Builder<T> addHandler(Handler<T> handler) { if (this.head == null) { this.head = handler; this.tail = handler; return this; } this.tail.setNext(handler); this.tail = handler; return this; } public Handler<T> build() { return this.head; } } } -
定义执行计划
package com.zj.study.xx; /** * @author zhangjun * @date 2023/6/25 16:14 */ public class Ahandler<T> extends Handler<T> { @Override public void doHandler(T a) { if (!"a".equals(a)) { System.out.println("a error"); return; } if (null != next) { next.doHandler(a); } } } package com.zj.study.xx; /** * @author zhangjun * @date 2023/6/25 16:14 */ public class Bhandler<T> extends Handler<T> { @Override public void doHandler(T b) { if (!"b".equals(b)) { System.out.println("b error"); return; } if (null != next) { next.doHandler(b); } } } package com.zj.study.xx; /** * @author zhangjun * @date 2023/6/25 16:14 */ public class Chandler<T> extends Handler<T> { @Override public void doHandler(T c) { if (!"a".equals(c)) { System.out.println("c error"); return; } if (null != next) { next.doHandler(c); } } } package com.zj.study.xx; /** * @author zhangjun * @date 2023/6/25 16:14 */ public class Dhandler<T> extends Handler<T> { @Override public void doHandler(T d) { System.out.println("ok"); } } -
最终执行
Handler.Builder<String> builder = new Handler.Builder<>(); Handler.Builder<String> builder1 = builder.addHandler(new Ahandler<String>()) .addHandler(new Bhandler<String>()) .addHandler(new Chandler<String>()) .addHandler(new Dhandler<String>()); builder1.build().doHandler("a"); -
注入Spring
package com.zj.study.yyy; import com.zj.study.A; import com.zj.study.B; /** * @author Zpain * @date 2023/6/25 16:08 */ public interface Handler2 { /** * 执行任务 * * @param b */ B doHandler(B b); } @AllArgsConstructor @NoArgsConstructor @Data public class B { private int id; private int num; } -
定义执行计划
package com.zj.study.yyy; import com.zj.study.B; import org.springframework.stereotype.Service; /** * @author Zpain * @date 2023/6/25 16:53 */ @Service public class AaHandler implements Handler2 { /** * 执行任务 * * @param b */ @Override public B doHandler(B b) { if (b.getId() < 10) { throw new RuntimeException("id error"); } return b; } } package com.zj.study.yyy; import com.zj.study.B; import org.springframework.stereotype.Service; /** * @author Zpain * @date 2023/6/25 16:53 */ @Service public class BbHandler implements Handler2 { /** * 执行任务 * * @param b */ @Override public B doHandler(B b) { if (b.getNum() < 10) { throw new RuntimeException("num error"); } return b; } } package com.zj.study.yyy; import com.zj.study.B; import org.springframework.stereotype.Service; /** * @author Zpain * @date 2023/6/25 16:53 */ @Service public class CcHandler implements Handler2 { /** * 执行任务 * * @param b */ @Override public B doHandler(B b) { System.out.println("ok"); return b; } } -
注入到Spring中
package com.zj.study.yyy; import com.zj.study.B; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; /** * @author Zpain * @date 2023/6/25 17:15 */ @Component public class HandlerAdaptor { @Autowired private List<Handler2> list; public B execute(B b) { for (Handler2 handleIntercept : list) { b = handleIntercept.doHandler(b); } return b; } } -
最终执行
@Autowired private HandlerAdaptor adaptor; @Test public void get3() { B b = new B(10, 10); B execute = adaptor.execute(b); log.info("b:{}", JSON.toJSONString(execute)); }如果想要执行顺序 自行定义 sort或者@Order,或者实现Ordered方式