下圖是關于紅綠燈轉換的一個實現類圖,具體的轉換是這樣子的,在初始的情況下,設定一個燈的狀態,比如是綠燈,那么燈的下一個狀態則是黃燈,緊接著是紅燈,然后再是綠燈,依次循環;通過改變燈的狀態,改變其行為。
package com.plabmedia.state;
public interface LightState {
/**
* 打印當前的狀態
*/
public void print(Light light);
}
package com.plabmedia.state;
public class RedLight implements LightState{
@Override
public void print(Light light) {
System.out.println("current state is red");
light.setState(new GreenLight());
}
}
package com.plabmedia.state;
public class YellowLight implements LightState{
@Override
public void print(Light light) {
System.out.println("current state is yellow");
light.setState(new RedLight());
}
}
package com.plabmedia.state;
public class GreenLight implements LightState {
@Override
public void print(Light light) {
System.out.println("current state is green");
light.setState(new YellowLight());
}
}
package com.plabmedia.state;
public class Light {
private LightState state;
public LightState getState() {
return state;
}
public void setState(LightState state) {
this.state = state;
}
public void print(){
state.print(this);
}
public Light(LightState state){
this.state = state;
}
}
package com.plabmedia.state;
public class Client {
public static void main(String args[]){
Light light = new Light(new GreenLight());
light.print();
light.print();
light.print();
light.print();
light.print();
light.print();
}
}
上面是對狀態模式一個小小的實現,這個實現也僅僅是認識級的,在我們實際應用中,如果用到狀態模式,應該比這個要負責的多,只是基本的結構是相似的。那我們下面針對狀態模式做一些討論。