狀態模式(State Pattern):
一個對象的內在狀態改變時允許改變其行為,這個對象看起來像是改變了其類。
狀態模式主要解決,當控制一個對象狀態的條件表達式過於複雜時的情況;把狀態的判斷邏輯轉移到表示不同狀態的一系列類中,可以把複雜的判斷邏輯簡化;
狀態模式的角色:
上下文環境(Context)角色、抽象狀態(State)角色、具體狀態(Concrete State)和客戶端(Client)角色;
狀態模式的案例:
實現類圖:

實現代碼:
/**
* 上下文環境(Context)角色
*/
public class Context {
private State state;
public Context() {
state = null;
}
public void setState(State state) {
this.state = state;
}
public State getState() {
return state;
}
}
/**
* 抽象狀態(State)角色
*/
public interface State {
public void doAction(Context context);
}
/**
* 具體狀態(Concrete State)
*/
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";
}
}
/**
* 具體狀態(Concrete State)
*/
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";
}
}
/**
* 客戶端
*/
public class Client {
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());
}
}
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/224088.html