我想像下面那样实现 FSM
- 第一级最基本的状态是BASE_STATE。所有状态都源自 BASE_STATE。
- Second Level , WAITING_STATE, RUNNING_STATE, END_STATE, ... 等等(源自 BASE_STATE。没有新功能)
- 第三级,有 2 组状态(主动和被动),对所有第二级状态进行一对一匹配,例如
ACTIVE_WAITING_STATE、ACTIVE_RUNNING_STATE、ACTIVE_END_STATE 等等 PASSIVE_WAITING_STATE、PASSIVE_RUNNING_STATE、PASSIVE_END_STATE 等等
大多数功能对于 ACTIVE 和 PASSIVE 状态都是通用的,只是覆盖了一些小功能。到这里为止没有问题。问题是,所有第三级组都有共同的功能。我的意思是,例如我必须实现 2 个不同的 increment() 函数,其中一个是 ACTIVE_xxx_STATEs,另一个是 PASSIVE_xxx_STATEs。如何在不重写所有状态的情况下做到这一点(例如 ACTIVE_WAITING_STATE 、 ACTIVE_RUNNING_STATE 、 ACTIVE_END_STATE 以及 PASSIVE 状态)
为了澄清我的问题,我丑陋的sol'n。问题是增量函数是相同的,并且为所有 ActivexxxState(以及 PassiveXXXState)重写。
public class BaseState {
// Lots of functions
}
public class WaitingState extends BaseState{
// Lots of functions
}
public class RunningState extends BaseState{
// Lots of functions
}
public class EndState extends BaseState{
// Lots of functions
}
public Class ActiveWaitingState extends WaitingState {
// Few unique functions
private void increment() {
System.out.println("increment active");
}
}
public Class ActiveRunningState extends RunningState {
// Few unique functions
private void increment() {
System.out.println("increment active");
}
}
public Class ActiveEndState extends EndState {
// Few unique functions
private void increment() {
System.out.println("increment active");
}
}
public Class PassiveWaitingState extends WaitingState {
// Few unique functions
private void increment() {
System.out.println("increment passive");
}
}
public Class PassiveRunningState extends RunningState {
private void increment() {
System.out.println("increment passive");
}
}
public Class PassiveEndState extends EndState {
private void increment() {
System.out.println("increment passive");
}
}