在状态模式中,当一个对象的内在状态改变时允许改变其行为, 这个对象看起来像是改变了它的类。
代码
1public abstract class State {
2 public String stateName;
3 public abstract void handle(Context context);
4}
1public class Context {
2 private State state;
3
4 public Context(State state) {
5 this.state = state;
6 }
7
8 public void setState(State state) {
9
10 System.out.println("当前状态为: "+this.state.stateName);
11 this.state = state;
12 System.out.println("状态变更为: "+this.state.stateName);
13 System.out.println("--------------------");
14 }
15
16 public void request(){
17 state.handle(this);
18 }
19}
1public class ConcreteStateA extends State {
2 public ConcreteStateA(){
3 stateName = "状态A";
4 }
5
6 @Override
7 public void handle(Context context) {
8 context.setState(new ConcreteStateB());
9 }
10}
1public class ConcreteStateB extends State{
2 public ConcreteStateB() {
3 stateName = "状态B";
4 }
5
6 @Override
7 public void handle(Context context) {
8 context.setState(new ConcreteStateA());
9 }
10}
1public class Main {
2 public static void main(String[] args) {
3 Context context = new Context(new ConcreteStateA());
4
5 context.request();
6 context.request();
7 context.request();
8 }
9}
10
11//输出
12当前状态为: 状态A
13状态变更为: 状态B
14--------------------
15当前状态为: 状态B
16状态变更为: 状态A
17--------------------
18当前状态为: 状态A
19状态变更为: 状态B
20--------------------