23. State Machine Accessor
StateMachine是与状态机本身进行通信的主要接口。 有时候需要对状态机及其嵌套机器和区域的内部结构进行更多的动态和程序化访问。 对于这些用例,StateMachine公开了一个功能接口StateMachineAccessor,它提供了一个接口来访问单个StateMachine和Region实例。
StateMachineFunction是一个简单的功能接口,允许将StateMachineAccess接口应用到状态机中。 使用jdk7这些将创建一个小的详细代码,但与jdk8 lambda的东西看起来相对非冗长。
方法doWithAllRegions允许访问状态机中的所有Region实例。
stateMachine.getStateMachineAccessor().doWithAllRegions(new StateMachineFunction<StateMachineAccess<String,String>>() {
@Override
public void apply(StateMachineAccess<String, String> function) {
function.setRelay(stateMachine);
}
});
stateMachine.getStateMachineAccessor()
.doWithAllRegions(access -> access.setRelay(stateMachine));
方法doWithRegion允许访问状态机中的单个区域实例。
stateMachine.getStateMachineAccessor().doWithRegion(new StateMachineFunction<StateMachineAccess<String,String>>() {
@Override
public void apply(StateMachineAccess<String, String> function) {
function.setRelay(stateMachine);
}
});
stateMachine.getStateMachineAccessor()
.doWithRegion(access -> access.setRelay(stateMachine));
WithAllRegions方法可以访问状态机中的所有Region实例。
for (StateMachineAccess<String, String> access : stateMachine.getStateMachineAccessor().withAllRegions()) {
access.setRelay(stateMachine);
}
stateMachine.getStateMachineAccessor().withAllRegions()
.stream().forEach(access -> access.setRelay(stateMachine));
使用withRegion方法可以访问状态机中的单个区域实例。
stateMachine.getStateMachineAccessor()
.withRegion().setRelay(stateMachine);