一、业务流向
根据商品不同的状态,由不同的职责实体去处理
二、代码实现
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系列款]商品出现问题,正和客服沟通