不使用状态模式:需要switch-case判断当前状态执行不同逻辑

class Context {
    int state;

    void doAction1() {
        switch(state) {
            case 0:
                state = 1;
                break;
            case 1:
                state = 2;
                break;
            case 2:
                state = 0;
                break;
        }
    }
    void doAction2() {
        switch(state) {
            case 0:
                break;
            case 1:
                break;
        }
    }
}

问题:

  1. 代码都堆在一个类里面

使用状态模式后:

  1. 将行为放到状态类中处理

元素:

  1. 抽象状态类
  2. 具体状态类
  3. 上下文持有状态

当前状态执行完之后,内部自动流转到下一个状态

实例

  1. 饮料售卖机:投币、选择、出货
  2. TCP连接:Listening、Established、Closed
  3. CheckBox
  4. View状态

results matching ""

    No results matching ""