不使用状态模式:需要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;
}
}
}
问题:
- 代码都堆在一个类里面
使用状态模式后:
- 将行为放到状态类中处理
元素:
- 抽象状态类
- 具体状态类
- 上下文持有状态
当前状态执行完之后,内部自动流转到下一个状态
实例
- 饮料售卖机:投币、选择、出货
- TCP连接:Listening、Established、Closed
- CheckBox
- View状态