>> consumers = eventRegistries.computeIfAbsent(event, k -> new ArrayList<>());
consumers.add(logic);
return this;
}
/**
* 指定状态机的执行器
*
* 优先级低于添加事件时指定的执行器
*
* @param executor 执行器
*/
public StateMachineBuilder executor(Executor executor) {
this.executor = executor;
return this;
}
/**
* 定义状态机是否异步执行
*
* @param async 是否异步执行
*/
public StateMachineBuilder async(Boolean async) {
this.async = async;
return this;
}
/**
* 定义状态机为异步执行
*/
public StateMachineBuilder async() {
return async(true);
}
/**
* 指定状态机的类型
* 状态机并发与否并不影响事件的执行逻辑
*
* @param type 类型
*/
public StateMachineBuilder type(StateMachineType type) {
if (type == null) {
throw new NullPointerException();
}
this.type = type;
return this;
}
/**
* 指定状态机的类型为标准型
* 状态机并发与否并不影响事件的执行逻辑
*/
public StateMachineBuilder standard() {
return type(StateMachineType.STANDARD);
}
/**
* 指定状态机的类型为并发型
* 状态机并发与否并不影响事件的执行逻辑
*/
public StateMachineBuilder concurrent() {
return type(StateMachineType.CONCURRENT);
}
/**
* 构建
*/
@SuppressWarnings("unchecked")
public > M build() {
if (type == null) {
throw new NullPointerException();
}
if (type.equals(StateMachineType.STANDARD)) {
return (M)new StandardStateMachine<>(stateList, entryHandlers,
leaveHandlers, exchangeHandlers, eventRegistries, executor, async);
} else if (type.equals(StateMachineType.CONCURRENT)) {
return (M)new DefaultConcurrentStateMachine<>(stateList, entryHandlers,
leaveHandlers, exchangeHandlers, eventRegistries, executor, async);
}
throw new IllegalArgumentException("未知的状态机类型: " + type);
}
/**
* 状态机构建器
*
* @param states 状态集合
* @return 状态机构建器实例
*/
public static StateMachineBuilder from(S[] states) {
return new StateMachineBuilder<>(states);
}
/**
* 状态机构建器
*
* @param states 状态集合
* @return 状态机构建器实例
*/
public static StateMachineBuilder from(List states) {
return new StateMachineBuilder<>(states);
}
}