Java设计模式之状态模式
一、 状态模式
状态模式允许一个对象在其内部状态改变的时候改变行为。这个对象看上去象是改变了它的类一样。状态模式把所研究的对象的行为包装在不同的状态对象里,每一个状态对象都属于一个抽象状态类的一个子类。状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变。状态模式需要对每一个系统可能取得的状态创立一个状态类的子类。当系统的状态变化时,系统便改变所选的子类。
二、 状态模式的实现
首先创建一个state接口定义一个操作,然后创建一些实现了state接口具体状态类(concrete state classes)。Context类持有State的引用。StaePatternDemo 将具体展现状态模式的应用。
类之间的继承关系:
步骤一:创建一个state接口
package study_02.designpattern.state;
public interface State {
public void doAction(Context context);
}
步骤二:创建Context类
package study_02.designpattern.state;
public class Context {
private State state;
public Context(){
state = null;
}
public void setState(State state){
this.state = state;
}
public State getState(){
return state;
}
}
步骤三:创建实现了state接口的具体的类
package study_02.designpattern.state;
public class StartState implements State {
public void doAction(Context context) {
System.out.println("Player is in start state");
context.setState(this);
}
public String toString(){
return "Start State";
}
}
package study_02.designpattern.state;
public class StopState implements State {
public void doAction(Context context) {
System.out.println("Player is in stop state");
context.setState(this);
}
public String toString(){
return "Stop State";
}
}
步骤四:具体应用场景
package study_02.designpattern.state;
public class StatePatternDemo {
public static void main(String[] args) {
Context context = new Context();
StartState startState = new StartState();
startState.doAction(context);
System.out.println(context.getState().toString());
StopState stopState = new StopState();
stopState.doAction(context);
System.out.println(context.getState().toString());
}
}
步骤五:输出结果
Player is in start state
Start State
Player is in stop state
Stop State
三、参考资料