状态转换
需求
订单是电商项目中不可缺少的组成部分,而订单状态的转换也是我们经常讨论的问题。我们都知道订单状态的转换是有一定的逻辑性的,不可以随意转换。
例:你想购买某个商品,只是把它加入了购物车,此时应该是未支付状态。如果来个请求想把它转换为退款状态,那么系统应该抛出提示信息“状态转换失败,请先完成购买!”
用枚举来完成一下订单状态转换的限制。
实现
枚举类定义:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| public enum OrderStatus{ NO_PAY("未支付",0){ @Override public Boolean canChange(OrderStatus orderStatus) { switch (orderStatus){ case PAY: return true; default: return false; } } }, PAY("已支付",1){ @Override public Boolean canChange(OrderStatus orderStatus) { switch (orderStatus){ case REFUNDING: return true; default: return false; } } }, REFUNDING("退款中",2){ @Override public Boolean canChange(OrderStatus orderStatus) { switch (orderStatus){ case REFUNDED: case FAIL_REFUNDED: return true; default: return false; } } }, REFUNDED("退款成功",3), FAIL_REFUNDED("退款失败",4), ;
private final String name; private final int status;
private OrderStatus(String name,int status){ this.name = name; this.status = status; }
public Boolean canChange(OrderStatus orderStatus){ return false; } } 调用方法:
public class EnumTest {
public static void main(String[] args) { Boolean aBoolean = OrderStatus.NO_PAY.canChange(OrderStatus.PAY); String statusStr = aBoolean?"可以":"不可以"; System.out.println("是否可以完成状态转换:"+ statusStr);
Boolean flag = OrderStatus.REFUNDED.canChange(OrderStatus.FAIL_REFUNDED); String flagStr = flag?"可以":"不可以"; System.out.println("是否可以完成状态转换:"+ flagStr); } }
|