状态模式(State Pattern),属于行为型模式。允许对象在内部状态发生改变时改变它的行为,看起来好像修改了它的类。当代码中包含大量与对象状态有关的条件语句时就可以使用状态模式。可以将各种具体的状态类抽象出来,对象的行为依赖于它的状态(属性),所以状态改变而改变它的相关行为。也就是可以修改类的属性,属性改了,依赖于属性的方法也就改变了。
非常简单的一个demo:
包含State状态的类:
public class Context {
private State state;
public Context() {
state = null;
}
public State getState() {
return state;
}
public void setState(State state) {
this.state = state;
}
}
状态的抽象接口:
public interface State {
public void doAction(Context context);
}
具体的状态
public class StartState implements State{
@Override
public void doAction(Context context) {
System.out.println("start");
// 用自己的实例,设置对象的状态
context.setState(this);
}
}
public class EndState implements State{
@Override
public void doAction(Context context) {
System.out.println("end");
context.setState(this);
}
}
调用:
Context context = new Context();
StartState start = new StartState();
start.doAction(context);
EndState end = new EndState();
end.doAction(context);
输出结果:
start
end