狀態模式:當一個對象的內在狀態改變時允許改變其行爲,這個對象看起來像是改變了其類
主要解決: 當控制一個對象狀態轉換的條件表達式過於複雜時,把狀態的判斷邏輯轉移到表示不同狀態的一系列類當中,可以把複雜的邏輯簡化。 (當然,如果這個狀態判斷很簡單,那就沒必要用狀態模式了)
什麼時候用?
當一個對象的行爲取決於它的狀態,並且它必須在運行時刻根據狀態改變它的行爲時,就可以考慮使用狀態模式了
UML:
JAVA:
public class StateTest {
public static void main(String[] args) {
Content content = new Content();
content.getState().nextState(content);
content.getState().xingwei();
content.getState().nextState(content);
content.getState().xingwei();
}
}
interface State{
void nextState(Content content);
void xingwei();
}
class StateA implements State{
@Override
public void nextState(Content content) {
content.setState(new StateB());
}
@Override
public void xingwei() {
System.out.println("A的行爲");
}
}
class StateB implements State{
@Override
public void nextState(Content content) {
content.setState(new StateA());
}
@Override
public void xingwei() {
System.out.println("B的行爲");
}
}
class Content{
private State state = new StateA();
public void questNextState(){
state.nextState(this);
}
public State getState() {
return state;
}
public void setState(State state) {
this.state = state;
}
}