以下内容摘抄于《C#大话设计模式》
状态模式(State),当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。
状态模式的结构图:
State类,抽象状态类,定义一个接口以封装与Context的一个特定状态相关的行为。
package com.schema.state;
public abstract class State {
public abstract void Handle(Context context);
}
Concrete类:具体状态类,每一个子类实现一个与Context的一个状态相关的行为。
package com.schema.state;
public class ConcreteStateA extends State {
public void Handle(Context context){
// 设置ConcreteStateA的下一个状态是ConcreteStateB
context.setState(new ConcreteStateB());
}
}
package com.schema.state;
public class ConcreteStateB extends State {
public void Handle(Context context){
// 设置ConcreteB的下一个状态时ConcreteStateA
context.setState(new ConcreteStateA());
}
}
Context类和客户端代码
package com.schema.state;
public class Context {
private State state;
public State getState() {
return state;
}
public void setState(State state) {
this.state = state;
System.out.println("现在的状态是:" + state.getClass().getName());
}
public Context(State state){
this.state = state;
}
public void Request(){
state.Handle(this);
}
public static void main(String[] args){
Context context = new Context(new ConcreteStateA());
context.Request();
context.Request();
context.Request();
context.Request();
}
}
运行结果如下: