You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
2.9 KiB
98 lines
2.9 KiB
package mxdx2;
|
|
|
|
//订单流程编排器(状态模式)
|
|
public class orchestration {
|
|
private State currentState;
|
|
private String orderId;
|
|
private ServiceGateway gateway;
|
|
|
|
public orchestration(ServiceGateway gateway) {
|
|
this.gateway = gateway;
|
|
this.currentState = new InitState(this);
|
|
}
|
|
|
|
// 启动订单流程
|
|
public void startProcess(String token, String userId, String productId) {
|
|
currentState.process(token, userId, productId);
|
|
}
|
|
|
|
// 状态变更
|
|
public void setState(State state) {
|
|
this.currentState = state;
|
|
}
|
|
|
|
// 获取网关
|
|
public ServiceGateway getGateway() {
|
|
return gateway;
|
|
}
|
|
|
|
// 设置订单ID
|
|
public void setOrderId(String orderId) {
|
|
this.orderId = orderId;
|
|
}
|
|
|
|
// 状态接口
|
|
public interface State {
|
|
void process(String token, String userId, String productId);
|
|
}
|
|
|
|
// 初始状态
|
|
public static class InitState implements State {
|
|
private orchestration orchestrator;
|
|
|
|
public InitState(orchestration orchestrator) {
|
|
this.orchestrator = orchestrator;
|
|
}
|
|
|
|
@Override
|
|
public void process(String token, String userId, String productId) {
|
|
System.out.println("Starting order process...");
|
|
// 检查用户
|
|
String user = orchestrator.getGateway().getUser(token, userId);
|
|
if (user == null) {
|
|
throw new RuntimeException("User not found");
|
|
}
|
|
// 检查商品
|
|
String product = orchestrator.getGateway().getProduct(token, productId);
|
|
if (product == null) {
|
|
throw new RuntimeException("Product not found");
|
|
}
|
|
// 进入下一个状态
|
|
orchestrator.setState(new CreateOrderState(orchestrator));
|
|
orchestrator.currentState.process(token, userId, productId);
|
|
}
|
|
}
|
|
|
|
// 创建订单状态
|
|
public static class CreateOrderState implements State {
|
|
private orchestration orchestrator;
|
|
|
|
public CreateOrderState(orchestration orchestrator) {
|
|
this.orchestrator = orchestrator;
|
|
}
|
|
|
|
@Override
|
|
public void process(String token, String userId, String productId) {
|
|
System.out.println("Creating order...");
|
|
String orderId = orchestrator.getGateway().createOrder(token, userId, productId);
|
|
orchestrator.setOrderId(orderId);
|
|
// 进入完成状态
|
|
orchestrator.setState(new CompleteState(orchestrator));
|
|
orchestrator.currentState.process(token, userId, productId);
|
|
}
|
|
}
|
|
|
|
// 完成状态
|
|
public static class CompleteState implements State {
|
|
private orchestration orchestrator;
|
|
|
|
public CompleteState(orchestration orchestrator) {
|
|
this.orchestrator = orchestrator;
|
|
}
|
|
|
|
@Override
|
|
public void process(String token, String userId, String productId) {
|
|
System.out.println("Order process completed. Order ID: " + orchestrator.orderId);
|
|
}
|
|
}
|
|
} |