状态模式 - 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
  ******************

转载于:https://www.cnblogs.com/liang-zisong/p/7986909.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值