State Pattern
- Localize state behavior
- Separate what from where
Main
public static void main(String[] args) {
Fan fan = new Fan();
System.out.println(fan);
fan.pullChain();
System.out.println(fan);
fan.pullChain();
System.out.println(fan);
}
Fan
public class Fan {
State fanOff;
State fanLow;
State fanMedium;
State currentState;
public Fan(){
fanOff = new FanOff(this);
fanLow = new FanLow(this);
fanMedium = new FanMedium(this);
currentState = fanOff;
}
public void setState(State state){
currentState = state;
}
public State getLowState(){
return fanLow;
}
public State getMediumState(){
return fanMedium;
}
public State getOffState(){
return fanOff;
}
public void pullChain(){
currentState.handleRequest();
}
public String toString(){
return currentState.toString();
}
}
State
public abstract class State {
public void handleRequest(){
System.out.println("Action not established");
}
}
FanOff
public class FanOff extends State {
Fan fan;
public FanOff(Fan fan) {
this.fan = fan;
}
@Override
public void handleRequest(){
System.out.println("Turning fan on to low");
fan.setState(fan.getLowState());
}
public String toString(){
return "Fan is off";
}
}
FanLow
public class FanLow extends State {
Fan fan;
public FanLow(Fan fan) {
this.fan = fan;
}
@Override
public void handleRequest(){
System.out.println("From low to medium");
fan.setState(fan.getMediumState());
}
public String toString(){
return "Fan is low";
}
}
FanMedium
public class FanMedium extends State {
Fan fan;
public FanMedium(Fan fan) {
this.fan = fan;
}
@Override
public void handleRequest() {
System.out.println("From medium to off state");
fan.setState(fan.getOffState());
}
public String toString(){
return "Fan is in medium";
}
}
Comentarios
Publicar un comentario