下圖是關(guān)于紅綠燈轉(zhuǎn)換的一個(gè)實(shí)現(xiàn)類(lèi)圖,具體的轉(zhuǎn)換是這樣子的,在初始的情況下,設(shè)定一個(gè)燈的狀態(tài),比如是綠燈,那么燈的下一個(gè)狀態(tài)則是黃燈,緊接著是紅燈,然后再是綠燈,依次循環(huán);通過(guò)改變燈的狀態(tài),改變其行為。
package com.plabmedia.state;
public interface LightState {
/**
* 打印當(dāng)前的狀態(tài)
*/
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();
}
}
上面是對(duì)狀態(tài)模式一個(gè)小小的實(shí)現(xiàn),這個(gè)實(shí)現(xiàn)也僅僅是認(rèn)識(shí)級(jí)的,在我們實(shí)際應(yīng)用中,如果用到狀態(tài)模式,應(yīng)該比這個(gè)要負(fù)責(zé)的多,只是基本的結(jié)構(gòu)是相似的。那我們下面針對(duì)狀態(tài)模式做一些討論。