狀態(tài)模式是一種行為型設(shè)計(jì)模式,它允許一個(gè)對(duì)象在其內(nèi)部狀態(tài)改變時(shí)改變它的行為。在狀態(tài)模式中,對(duì)象的行為是由其狀態(tài)決定的。
下面是一個(gè)簡(jiǎn)單的狀態(tài)模式的實(shí)現(xiàn)步驟:
下面是一個(gè)簡(jiǎn)單的Java代碼實(shí)現(xiàn):
// 定義狀態(tài)接口
interface State {
void doAction(Context context);
}
// 實(shí)現(xiàn)具體狀態(tài)類
class StartState implements State {
public void doAction(Context context) {
System.out.println("Player is in start state");
context.setState(this);
}
}
class StopState implements State {
public void doAction(Context context) {
System.out.println("Player is in stop state");
context.setState(this);
}
}
// 上下文類
class Context {
private State state;
public Context() {
state = null;
}
public void setState(State state) {
this.state = state;
}
public State getState() {
return state;
}
}
// 測(cè)試代碼
public class StatePatternDemo {
public static void main(String[] args) {
Context context = new Context();
StartState startState = new StartState();
startState.doAction(context);
StopState stopState = new StopState();
stopState.doAction(context);
}
}
運(yùn)行以上代碼,輸出結(jié)果為:
Player is in start state
Player is in stop state
在上面的示例中,狀態(tài)接口State定義了一個(gè)行為方法doAction,StartState和StopState是具體的狀態(tài)類,它們分別實(shí)現(xiàn)了doAction方法。上下文類Context持有一個(gè)狀態(tài)對(duì)象,可以切換不同的狀態(tài)。在測(cè)試代碼中,我們首先創(chuàng)建一個(gè)Context對(duì)象,然后創(chuàng)建一個(gè)StartState對(duì)象,并通過(guò)doAction方法將Context對(duì)象的狀態(tài)切換為StartState;然后創(chuàng)建一個(gè)StopState對(duì)象,并通過(guò)doAction方法將Context對(duì)象的狀態(tài)切換為StopState。