根据状态决定动作

不同状态下的同一动作有不同的实现,就是一个简单的多态。简单面向接口编程

应用:TCP 不同的状态下open close ack的方法的实现是不一样的,扩展方法是不方便的,方法不扩展可以使用状态模式

线程状态案例

  • 线程是上下文
  • 线程状态是State
  • Running,Blocking等等是具体的状态

1616825720177-1ffbd844-1ee5-404e-a5fb-2e8cc19768c7.png

状态接口

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();
}
}