1. 设计接口
public interface Chain<T> {
void doHandler(T json);
}
public interface ChainHandler<T> {
void hander(T param, Chain chain);
}
2. 实现链式调用
public class ChainImpl<T extends ChainHandler<K>,K> implements Chain<K> {
private final List<T> handlers;
@Nullable
private Iterator<T> iterator;
public ChainImpl(List<T> handlers) {
this.handlers = handlers;
}
@Override
public void doHandler(K params) {
if (this.iterator == null) {
this.iterator = this.handlers.iterator();
}
if (this.iterator.hasNext()) {
T next = this.iterator.next();
next.hander(params, this);
}
}
}
3. 自定义handler
3.1 自义定参数对象
@AllArgsConstructor
@NoArgsConstructor
@Data
@Builder
public class DismissDTO {
private Long userId;
private Long groupId;
}
3.2 自定义handler,继承上方的ChainHandler
public interface DismissHandler extends ChainHandler<DismissDTO> {
}
3.3 编写实现类
@Order(2)
@Component
public class DismissHandler1 implements DismissHandler {
@Override
public void hander(DismissDTO params, Chain chain) {
System.out.println("解散班组条件1通过");
chain.doHandler(params);
}
}
@Order(1)
@Component
public class DismissHandler2 implements DismissHandler {
@Override
public void hander(DismissDTO params, Chain chain) {
System.out.println("解散班组条件2通过");
chain.doHandler(params);
}
}
4. 调用
private List<DismissHandler> dismissHandlers;
@Override
public Boolean dismissGroup(Long groupId, Long userId, String cause) {
ChainImpl<DismissHandler, DismissDTO> dismissHandlerStringChain = new ChainImpl<>(dismissHandlers);
dismissHandlerStringChain.doHandler(DismissDTO.builder().userId(userId).groupId(groupId).build());
return true;
}
5. 结果
