关于spring中使用责任链模式

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. 结果

在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值