根据状态决定动作
不同状态下的同一动作有不同的实现,就是一个简单的多态。简单面向接口编程
应用:TCP 不同的状态下open close ack的方法的实现是不一样的,扩展方法是不方便的,方法不扩展可以使用状态模式
线程状态案例
- 线程是上下文
- 线程状态是State
- Running,Blocking等等是具体的状态

状态接口
1 2 3 4
| public abstract class ThreadState_ { abstract void move(Action input); abstract void run(); }
|
具体状态
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| public class NewState extends ThreadState_ { private Thread_ t;
public NewState(Thread_ t) { this.t = t; }
@Override void move(Action input) { if(input.msg == "start") t.state = new RunningState(t); }
@Override void run() {
} }
|
上下文
1 2 3 4 5 6 7 8 9 10 11
| public class Thread_ { ThreadState_ state;
void move(Action input) { state.move(input); }
void run() { state.run(); } }
|