状态模式 - Demo (可切换代码块)

 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
  ******************

posted @ 2017-12-05 14:47  勤劳的杯子  阅读(311)  评论(0编辑  收藏  举报