状态模式

来源:互联网 发布:醉八仙宠物技能数据库 编辑:程序博客网 时间:2024/06/06 02:10

状态模式:允许在其内部状态变化的时候改变他的行为。可以理解为对象的行为其实是由他的状态来驱动的。

package com.jerry.design.state;// 测试类public class Test {public static void main(String[] args) {State state = new StateA();    StateManager controller = new StateManager(state);    for (int i = 0; i < 10; i++) {      state = controller.nextState();      System.out.print(state);      if(state == null) break;      System.out.print("->");      controller.nextStep();}}} interface State { public void lastState(StateManager c);  public void nextState(StateManager c); }class StateA implements State { public void lastState(StateManager c) {   c.setState(new StateC()); }  public void nextState(StateManager c) {   c.setState(new StateB()); }  @Override public String toString() {   return "i am StateA!"; }}class StateB implements State { public void lastState(StateManager c) {   c.setState(new StateA()); }  public void nextState(StateManager c) {   c.setState(new StateC()); }  @Override public String toString() {   return "i am StateB!"; }}class StateC implements State { public void lastState(StateManager c) {   c.setState(new StateB()); }  public void nextState(StateManager c) {   c.setState(new StateA()); }  @Override public String toString() {   return "i am StateC!"; }}class StateManager { private State state;  private StateManager(){} public StateManager(State initState){   this.state = initState; } public void setState(State state) {   this.state = state; } public void nextStep(){   if(this.state != null)     this.state.nextState(this); } public void lastStep(){   if(this.state != null)     this.state.lastState(this); } public State nextState(){   return this.state; }}

这个例子的难点其实是这个状态管理器,其中用一个State对象维护了当前状态和下一个状态,通过设置这个state对象的不同状态来获得不同的state的方法调用。

原创粉丝点击