feat: 状态机接口新增少量逻辑组合相关的默认方法.

This commit is contained in:
2025-04-23 11:30:27 +08:00
parent d533061410
commit 1e9113666b
2 changed files with 31 additions and 6 deletions

View File

@@ -110,11 +110,6 @@ public abstract class AbstractStateManager<S> implements StateManager<S> {
return stateList.size();
}
@Override
public boolean isSwitchable() {
return stateList.size() > 1;
}
/**
* 将序号移动至下一个
* <li> 自动归零

View File

@@ -40,10 +40,40 @@ public interface StateManager<S> {
/**
* 是否可切换
* <p>
* 默认情况下, 状态集合中的状态数量大于1时就可以切换。部分实现在特定情况下可能不允许切换,
* 比如断路的单向状态管理器 {@link BreakageUnidirectionalStateManager}, 当状态为最后一个时
* 则不允许向前、或者向后切换
* </p>
*
* @return 可切换返回真, 否则返回假
*/
default boolean isSwitchable() {
return true;
return size() > 1;
}
/**
* 校验当前状态是否为指定的状态
*
* @param state 指定的状态
* @return 符合返回真, 否则返回假
*/
default boolean now(S state) {
return current().equals(state);
}
/**
* 如果是指定的状态则切换到另一个状态
* <li> 例: 检测当前状态是否为 1 且可切换, 如何为 1 则将状态切换到 2
* <li> 结合了 {@link #current()}、 {@link #switchTo(Object)} 及 {@link #isSwitchable()}
*
* @param now 当前状态
* @param newState 新的状态
* @return 如果当前状态不符合或者不可切换则返回假, 否则走切换逻辑, 此时结果取决于切换的结果.
*/
default boolean switchToIfPresent(S now, S newState) {
if (isSwitchable() || now.equals(current()))
return switchTo(newState);
return false;
}
}