1. 状态模式定义
意图
状态模式: 允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。
适用性
一个对象的行为取决于它的状态, 并且它必须在运行时刻根据状态改变它的行为。
一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态。这个状态通常用一个或多个枚举常量表示。通常, 有多个操作包含这一相同的条件结构。State模式将每一个条件分支放入一个独立的类中。这使得你可以根据对象自身的情况将对象的状态作为一个对象,这一对象可以不依赖于其他对象而独立变化。
类图:
2. 实例
//测试
public class StatePatternTest {
public static void main(String[] args){
State state=new State();
Context context=new Context(state);
state.setValue("state 1");
context.method();
state.setValue("state 2");
context.method();
state.setValue("state 3");
context.method();
}
}
//状态类
class State{
private String value;
public String getValue(){
return value;
}
public void setValue(String value){
this.value=value;
}
public void method1(){
System.out.println("execute the first opt");
}
public void method2(){
System.out.println("execute the second opt");
}
}
//根据状态的不同,采用不同的措施
class Context{
private State state=null;
public Context(State state){
this.state=state;
}
public void setState(State state){
this.state=state;
}
public State getState(){
return state;
}
public void method(){
if(state.getValue().equals("state 1")){
state.method1();
}else if(state.getValue().equals("state 2")){
state.method2();
}else{
System.out.println("error state");
}
}
}
运行结果:
execute the first opt
execute the second opt
error state