定義
在狀態(tài)模式(State Pattern)中聊替,類的行為是基于它的狀態(tài)改變的时呀。這種類型的設(shè)計模式屬于行為型模式民效。
在狀態(tài)模式中区岗,我們創(chuàng)建表示各種狀態(tài)的對象和一個行為隨著狀態(tài)對象改變而改變的 context 對象臀防。
實現(xiàn)
我們將創(chuàng)建一個 State 接口和實現(xiàn)了 State 接口的實體狀態(tài)類眠菇。Context 是一個帶有某個狀態(tài)的類。
StatePatternDemo袱衷,我們的演示類使用 Context 和狀態(tài)對象來演示 Context 在狀態(tài)改變時的行為變化捎废。
步驟 1
創(chuàng)建一個接口。
State.java
public interface State {
public void doAction(Context context);
}
步驟 2
創(chuàng)建實現(xiàn)接口的實體類致燥。
StartState.java
public class StartState implements State {
public void doAction(Context context) {
System.out.println("Player is in start state");
context.setState(this);
}
public String toString(){
return "Start State";
}
}
StopState.java
public class StopState implements State {
public void doAction(Context context) {
System.out.println("Player is in stop state");
context.setState(this);
}
public String toString(){
return "Stop State";
}
}
步驟 3
創(chuàng)建 Context 類登疗。
Context.java
public class Context {
private State state;
public Context(){
state = null;
}
public void setState(State state){
this.state = state;
}
public State getState(){
return state;
}
}
步驟 4
使用 Context 來查看當狀態(tài) State 改變時的行為變化。
StatePatternDemo.java
public class StatePatternDemo {
public static void main(String[] args) {
Context context = new Context();
StartState startState = new StartState();
startState.doAction(context);
System.out.println(context.getState().toString());
StopState stopState = new StopState();
stopState.doAction(context);
System.out.println(context.getState().toString());
}
}
步驟 5
驗證輸出嫌蚤。
Player is in start state
Start State
Player is in stop state
Stop State