1.定義#
當一個對象內在狀態改變時允許其改變行為,這個對象看起來像改變了其類。每個狀態一個實現類,狀態的切換實則為類之間的切換。不同的狀態類負責本狀態的邏輯和狀態轉換。委托統一的上下文類來控制整個過程。
2.類圖#
類圖
3.實現#
3.1抽象狀態類##
public abstract class State {
protected Context context;
public void setContext(Context _context) {
this.context = _context;
}
public abstract void handler1();
public abstract void handler2();
}
3.2具體狀態類##
public class ConcreteState1 extends State {
@Override
public void handler1() {
System.out.println("處于狀態1");
}
@Override
public void handler2() {
System.out.println("轉移向狀態2");
super.context.setState(Context.concreteState2);
super.context.handler2();
}
}
public class ConcreteState2 extends State {
@Override
public void handler2() {
System.out.println("處于狀態2");
}
@Override
public void handler1() {
System.out.println("轉移向狀態1");
super.context.setState(Context.concreteState1);
super.context.handler1();
}
}
3.3上下文類##
public class Context {
private State state;
public static final ConcreteState1 concreteState1 = new ConcreteState1();
public static final ConcreteState2 concreteState2 = new ConcreteState2();
public void setState(State state) {
this.state = state;
this.state.setContext(this);
}
public void handler1() {
this.state.handler1();
}
public void handler2() {
this.state.handler2();
}
}
3.4客戶端類##
public class Client {
public static void main(String args[]) {
Context context = new Context();
context.setState(Context.concreteState1);
context.handler2();
context.handler1();
}
}