package patterns.state;
import java.util.*;
import onjava.Nap;
interface State {
void run();
}
abstract class StateMachine {
protected State currentState;
protected abstract boolean changeState();
protected final void runAll() {
while(changeState())
currentState.run();
}
}
class Wash implements State {
@Override public void run() {
System.out.println("Washing");
new Nap(0.5);
}
}
class Spin implements State {
@Override public void run() {
System.out.println("Spinning");
new Nap(0.5);
}
}
class Rinse implements State {
@Override public void run() {
System.out.println("Rinsing");
new Nap(0.5);
}
}
class Washer extends StateMachine {
private int i = 0;
private Iterator<State> states =
Arrays.asList(
new Wash(), new Spin(),
new Rinse(), new Spin()
).iterator();
Washer() { runAll(); }
@Override public boolean changeState() {
if(!states.hasNext())
return false;
currentState = states.next();
return true;
}
}
public class StateMachineDemo {
public static void main(String[] args) {
new Washer();
}
}
Washing
Spinning
Rinsing
Spinning
*/