职责链设计模式实现商品购买到售后

一、业务流向

根据商品不同的状态,由不同的职责实体去处理

二、代码实现

1、定义职责链模型

public abstract class Handler {
    public Handler next;

    //处理请求的方法
    public abstract void handleProcess(Product product);

    public void next(Handler handler){
        this.next = handler;
    }
}

2、各个职责实现

订单

public class OrderHandler extends Handler {
    Logger logger = LoggerFactory.getLogger(OrderHandler.class);

    @Override
    public void handleProcess(Product product) {
        if (product.getStatus()== ProductEnum.ORDER.getCode()){
            logger.info("[{}]商品已下单",product.getName());
            product.setStatus(ProductEnum.PAY.getCode());
        }
        this.next.handleProcess(product);
    }
}

支付

public class PayHandler extends Handler {
    Logger logger = LoggerFactory.getLogger(PayHandler.class);

    @Override
    public void handleProcess(Product product) {
        if (product.getStatus()== ProductEnum.PAY.getCode()){
            logger.info("[{}]商品已支付",product.getName());
            product.setStatus(ProductEnum.DELIVERY.getCode());
        }
        this.next.handleProcess(product);
    }
}

物流

public class DeliveryHandler extends Handler {
    Logger logger = LoggerFactory.getLogger(DeliveryHandler.class);

    @Override
    public void handleProcess(Product product) {
        if (product.getStatus()== ProductEnum.DELIVERY.getCode()){
            logger.info("[{}]商品已发货",product.getName());
            product.setStatus(ProductEnum.ACCEPT.getCode());
        }
        this.next.handleProcess(product);
    }
}

收货

public class AcceptHandler extends Handler {
    Logger logger = LoggerFactory.getLogger(DeliveryHandler.class);

    @Override
    public void handleProcess(Product product) {
        if (product.getStatus()== ProductEnum.ACCEPT.getCode()){
            logger.info("[{}]商品已收货",product.getName());
            product.setStatus(ProductEnum.AFTERMAKER.getCode());
        }
        this.next.handleProcess(product);
    }
}

售后

public class AfterMakerHandler extends Handler {
    Logger logger = LoggerFactory.getLogger(DeliveryHandler.class);

    @Override
    public void handleProcess(Product product) {
        if (product.getStatus()== ProductEnum.AFTERMAKER.getCode()){
            logger.info("[{}]商品出现问题,正和客服沟通",product.getName());
        }
    }
}

3、订单状态枚举 商品实体

public enum ProductEnum {
    ORDER(1,"下单成功"),
    PAY(2,"支付成功"),
    DELIVERY(3,"发货成功"),
    ACCEPT(4,"收获成功"),
    AFTERMAKER(5,"客服接通");

    private int code;
    private String desc;

    ProductEnum(int code, String desc) {
        this.code = code;
        this.desc = desc;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

}
public class Product {
    /**
     * 商品状态
     */
    private Integer status;
    /**
     * 商品名称
     */
    private String name;

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

4、测试

 @Test
    void contextLoads() {
        Product product = new Product();
        product.setName("北京现代2021系列款");
        product.setStatus(1);
        OrderHandler orderHandler = new OrderHandler();
        PayHandler payHandler = new PayHandler();
        DeliveryHandler deliveryHandler = new DeliveryHandler();
        AcceptHandler acceptHandler = new AcceptHandler();
        AfterMakerHandler afterMakerHandler = new AfterMakerHandler();
        orderHandler.next(payHandler);
        payHandler.next(deliveryHandler);
        deliveryHandler.next(acceptHandler);
        acceptHandler.next(afterMakerHandler);
        orderHandler.handleProcess(product);
    }

5、效果

2022-04-01 11:19:40.369  INFO 12624 --- [           main] com.dong.netty.handler.OrderHandler      : [北京现代2021系列款]商品已下单
2022-04-01 11:19:40.372  INFO 12624 --- [           main] com.dong.netty.handler.PayHandler        : [北京现代2021系列款]商品已支付
2022-04-01 11:19:40.372  INFO 12624 --- [           main] com.dong.netty.handler.DeliveryHandler   : [北京现代2021系列款]商品已发货
2022-04-01 11:19:40.372  INFO 12624 --- [           main] com.dong.netty.handler.DeliveryHandler   : [北京现代2021系列款]商品已收货
2022-04-01 11:19:40.373  INFO 12624 --- [           main] com.dong.netty.handler.DeliveryHandler   : [北京现代2021系列款]商品出现问题,正和客服沟通

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值