定義
在狀態(tài)模式(State Pattern)中,類的行為是基于它的狀態(tài)改變的。這種類型的設(shè)計(jì)模式屬于行為型模式。
在狀態(tài)模式中,我們創(chuàng)建表示各種狀態(tài)的對象和一個行為隨著狀態(tài)對象改變而改變的 context 對象。
實(shí)現(xiàn)
我們將創(chuàng)建一個 State 接口和實(shí)現(xiàn)了 State 接口的實(shí)體狀態(tài)類。Context 是一個帶有某個狀態(tài)的類。
StatePatternDemo,我們的演示類使用 Context 和狀態(tài)對象來演示 Context 在狀態(tài)改變時(shí)的行為變化。
步驟 1
創(chuàng)建一個接口。
State.java
public interface State {
public void doAction(Context context);
}
步驟 2
創(chuàng)建實(shí)現(xiàn)接口的實(shí)體類。
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 來查看當(dāng)狀態(tài) State 改變時(shí)的行為變化。
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
驗(yàn)證輸出。
Player is in start state
Start State
Player is in stop state
Stop State