Java状态模式(State模式)(2)

public abstract class State{   public abstract void handlepush(Context c);   public abstract void handlepull(Context c);   public abstract void getcolor(); }

父类中的方法要对应state manager中的开关行为,在state manager中 本例就是Context中,有两个开关动作push推和pull拉.那么在状态父类中就要有具体处理这两个动作:handlepush() handlepull();同时还需要一个获取push或pull结果的方法getcolor()。


下面是具体子类的实现:

public class BlueState extends State{  public void handlepush(Context c){   //根据push方法"如果是blue状态的切换到green" ;   c.setState(new GreenState());  }  public void handlepull(Context c){    //根据pull方法"如果是blue状态的切换到red" ;   c.setState(new RedState());  }  public abstract void getcolor(){ return (Color.blue)} }

同样,其他状态的子类实现如blue一样。


第二步,要重新改写State manager 也就是本例的Context:

public class Context{  private Sate state=null; //我们将原来的 Color state 改成了新建的State state;  //setState是用来改变state的状态 使用setState实现状态的切换  pulic void setState(State state){     this.state=state;  }  public void push(){   //状态的切换的细节部分,在本例中是颜色的变化,已经封装在子类的handlepush中实现,这里无需关心   state.handlepush(this);   //因为sample要使用state中的一个切换结果,使用getColor()   Sample sample=new Sample(state.getColor());   sample.operate();  }  public void pull(){   state.handlepull(this);   Sample2 sample2=new Sample2(state.getColor());   sample2.operate();  } }

至此,我们也就实现了State的refactorying过程。


以上只是相当简单的一个实例,在实际应用中,handlepush或handelpull的处理是复杂的。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/6fecf8b1cf84e2adfc109a2a04e8be71.html