diff options
Diffstat (limited to 'java')
-rw-r--r-- | java/StateLessStateMachineTest.java | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/java/StateLessStateMachineTest.java b/java/StateLessStateMachineTest.java new file mode 100644 index 0000000..19417d9 --- /dev/null +++ b/java/StateLessStateMachineTest.java @@ -0,0 +1,106 @@ + +import java.util.Random; + +abstract class CommonState implements StateLessStateMachine.MachineState +{ + protected void say() + { + System.out.println(" # " + this.getClass().getName()); + } +} + +class StartState extends CommonState +{ + public StateLessStateMachine.State process() + { + say(); + System.out.println(" GO!"); + return StateLessStateMachine.State.TRY; + } +} + +class TryState extends CommonState +{ + public StateLessStateMachine.State process() + { + StateLessStateMachine.State nextState = null; + + say(); + + int i = (new Random()).nextInt(6); + switch (i) { + case 1: + System.out.println(" -> Success"); + nextState = StateLessStateMachine.State.SUCCESS; + break; + default: + System.out.println(" -> Failure"); + nextState = StateLessStateMachine.State.FAILURE; + break; + } + + return nextState; + } +} + +class FailureState extends CommonState +{ + public StateLessStateMachine.State process() + { + say(); + System.out.println(" -> Retry"); + return StateLessStateMachine.State.TRY; + } +} + +class SuccessState extends CommonState +{ + public StateLessStateMachine.State process() + { + say(); + System.out.println(" -> well done"); + return StateLessStateMachine.State.STOP; + } +} + +class StateLessStateMachine +{ + public enum State + { + STOP(-1), START(0), TRY(1), SUCCESS(2), FAILURE(3); + public int i; + State(int i) { this.i = i; } + } + + interface MachineState + { + public State process(); + } + + private MachineState[] states = { + new StartState(), + new TryState(), + new SuccessState(), + new FailureState() + }; + + public State process(State currentState) + { + if (currentState == State.STOP) return currentState; + return states[currentState.i].process(); + } +} + +public class StateLessStateMachineTest +{ + public static void main(String [] args ) + { + System.out.println(StateLessStateMachineTest.class.getName()); + StateLessStateMachine stm = new StateLessStateMachine(); + + StateLessStateMachine.State st = StateLessStateMachine.State.START; + do { + st = stm.process(st); + } while (st != StateLessStateMachine.State.STOP); + } +} |