【设计模式】之状态模式

来源:互联网 发布:鼠绘软件sai 编辑:程序博客网 时间:2024/05/04 05:22

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

 三、参考资料

http://www.tutorialspoint.com/design_pattern/state_pattern.htm