狀態模式:當一個對象的內在狀態發生改變時允許改變其內在行爲,這個對象看起來像是改變了其類。
狀態模式主要是解決的是當控制一個對象狀態轉換的條件表達式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同狀態的一系列類當中,可以把複雜的判斷邏輯簡化。
首先定義一個IState接口
public interface IState {
public void handle(Context context);
}
接着定義具體的狀態類,繼承IState接口
public class ConcreteStateA implements IState{
@Override
public void handle(Context context) {
context.setState(new ConcreteStateB());
}
}
public class ConcreteStateB implements IState{
@Override
public void handle(Context context) {
context.setState(new ConcreteStateA());
}
}
然後定義Context類
public class Context {
private IState state;
public Context(IState state){
this.state=state;
}
//可讀寫的狀態屬性,用來設置新狀態
public void setState(IState state){
this.state=state;
System.out.println(state.getClass().getName());
}
//獲取當前狀態
public IState getState(){
return state;
}
public void request(){
state.handle(this);
}
}
客戶端代碼
public static void main(String[] args) {
IState state=new ConcreteStateA();
Context context=new Context(state);
context.request();
context.request();
context.request();
context.request();
}