Open abcolorful opened 1 year ago
@Service public class StateManager { @Resource(name = "stateProcessor") private StateProcessor processor; public void setState(StateContext context, OrderStateEnum targetState) { switch (targetState) { case UNPAID: processor.onUnpaid(context); } } }
public class StateProcessorProxy implements StateProcessor { @Override public void onUnpaid(StateContext context) throws BizException { StateProcessor processor = findProcessor(order); processor.onUnpaid(context); }
private StateProcessor findProcessor(GrabOrderVO order) { return processorTable.get(ProcessorEnum.GRAB_PROC.name());
} }
<bean id="stateProcessor" class="com.xxx.StateProcessorProxy"> <property name="processorTable"> <map> <entry key="GRAB_PROC" value-ref="grabStateProcessor"/> </map> </property> </bean>
public class GrabProcessor extends AbstractStateProcessor { @Override public void onUnpaid(StateContext context) { } }
public abstract class AbstractStateProcessor implements StateProcessor { } GrabProcessor 继承 AbstractStateProcessor 实现 StateProcessor StateProcessorProxy 实现 StateProcessor 入口:StateManager,setState方法,case UNPAID:分支 预期调用链路: 1、StateManager-----setState方法--onUnpaid分支 2、StateProcessorProxy----onUnpaid方法 3、GrabProcessor----onUnpaid方法 实际调用链路: 1、StateManager-----setState方法--onUnpaid分支 2、StateProcessor----onUnpaid方法 3、StateProcessorProxy----onUnpaid方法 4、StateProcessor----onUnpaid方法
@Service public class StateManager { @Resource(name = "stateProcessor") private StateProcessor processor; public void setState(StateContext context, OrderStateEnum targetState) {
switch (targetState) {
case UNPAID:
processor.onUnpaid(context);
}
}
}
public class StateProcessorProxy implements StateProcessor { @Override public void onUnpaid(StateContext context) throws BizException { StateProcessor processor = findProcessor(order); processor.onUnpaid(context); }
} }
public class GrabProcessor extends AbstractStateProcessor { @Override public void onUnpaid(StateContext context) { } }
public abstract class AbstractStateProcessor implements StateProcessor { } GrabProcessor 继承 AbstractStateProcessor 实现 StateProcessor StateProcessorProxy 实现 StateProcessor 入口:StateManager,setState方法,case UNPAID:分支 预期调用链路: 1、StateManager-----setState方法--onUnpaid分支 2、StateProcessorProxy----onUnpaid方法 3、GrabProcessor----onUnpaid方法 实际调用链路: 1、StateManager-----setState方法--onUnpaid分支 2、StateProcessor----onUnpaid方法 3、StateProcessorProxy----onUnpaid方法 4、StateProcessor----onUnpaid方法