概念
状态模式 = 策略模式 + ‘状态’。
类的行为基于它的状态改变而改变。
例子
package mytest.stateDemo;
public class Context {
//持有一个State类型的对象实例
private State state;
public Context(State state){
this.state = state;
}
public void setState(State state) {
this.state = state;
}
//这里调用状态的方法
public void handle() {
//转调state来处理
this.state.handle(this);
}
}
package mytest.stateDemo;
public interface State {
//状态对应的处理
public void handle(Context context);
}
package mytest.stateDemo;
//具体状态类A
public class ConcreteStateA implements State{
@Override
public void handle(Context context) {
System.out.println("现在是在状态A");
//这里是重点,在策略模式中没有这个步骤,这里就是区别于策略模式的地方,重新设置了State的状态,也就是改变了状态
context.setState(new ConcreteStateB());
}
}
package mytest.stateDemo;
//具体状态类B
public class ConcreteStateB implements State{
@Override
public void handle(Context
context) {
System.out.println("现在是在状态B");
context.setState(new ConcreteStateA());
}
}
package mytest.stateDemo;
public class Client {
public static void main(String[] args) {
//创建状态
State state = new ConcreteStateA();
//创建环境
Context context = new Context(state);
context.handle();
context.handle();
context.handle();
context.handle();
context.handle();
}
}
输出结果:
现在是在状态A
现在是在状态B
现在是在状态A
现在是在状态B
现在是在状态A