1 public class Status { 2 3 public static void main(String[] args) { 4 Context context = new Context(new ConcreteStateA()); 5 context.Request(); 6 context.Request(); 7 context.Request(); 8 context.Request(); 9 } 10 } 11 //抽象的状态类 12 abstract class State{ 13 public String stateName; 14 public abstract void Handle(Context context); 15 } 16 //具体的状态A 17 class ConcreteStateA extends State{ 18 19 public ConcreteStateA() { 20 stateName = "状态A"; 21 } 22 23 @Override 24 //处理方法 25 public void Handle(Context context) { 26 context.setState(new ConcreteStateB()); 27 28 } 29 30 } 31 //具体的状态B 32 class ConcreteStateB extends State{ 33 public ConcreteStateB() { 34 stateName = "状态B"; 35 } 36 37 @Override 38 public void Handle(Context context) { 39 context.setState(new ConcreteStateA()); 40 } 41 42 } 43 //Context类 44 class Context{ 45 private State state; 46 public Context (State state) { 47 this.state = state; 48 } 49 //设置状态 50 public void setState(State state) { 51 System.out.println("当前状态为 :"+this.state.stateName); 52 this.state = state; 53 System.out.println("状态变更为:"+this.state.stateName); 54 System.out.println("******************"); 55 } 56 public void Request() { 57 state.Handle(this); 58 } 59 }
输出为:
当前状态为 :状态A
状态变更为:状态B
******************
当前状态为 :状态B
状态变更为:状态A
******************
当前状态为 :状态A
状态变更为:状态B
******************
当前状态为 :状态B
状态变更为:状态A
******************