平时我们在业务中可能会遇到状态扭转的操作 如果我们直接使用
this.state=XXXState 这样的编程方式 虽然能实现功能 但是不优雅 扩展性也不高,如果使用下面的方法进行状态扭转会优雅许多
状态接口
package com.atmb.csdn;
public interface State {
public State nextState();
}
枚举实现接口
package com.gbdxc.csdn;
import java.util.Arrays;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
public enum OrderState implements State {
Create("0") {
@Override
public OrderState nextState() {
return Shipped;
}
{
}}, Processing("1") {
@Override
public OrderState nextState() {
return Delivered;
}
{
}}, Shipped("2") {
@Override
public OrderState nextState() {
return Processing;
}
{
}}, Delivered("3") {
@Override
public OrderState nextState() {
return Delivered;
}
};
OrderState(String state) {
this.state = state;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
String state;
static Map<String, State> cacheMap;
static {
cacheMap = Arrays.stream(OrderState.values()).collect(Collectors.toMap(OrderState::getState, Function.identity()));
}
public static State of(String state) {
return cacheMap.get(state);
}
}
订单类
package com.atmb.csdn;
public class Order {
private String state;
public Order() {
this.state = OrderState.Create.getState();
}
public void next() {
state= ((OrderState) OrderState.of(state).nextState()).getState();
}
public void createOrder() {
next();
System.out.println("订单创建成功");
}
public static void main(String[] args) {
Order order = new Order();
order.createOrder();
}
}