首页 > 代码库 > 设计模式之状态模式
设计模式之状态模式
1、定义
允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类
2、通用类图
状态模式的核心是封装,状态的变更引起了行为的变更,从外部看起来就好像这个对象对应的类发生了改变一样。
State抽象状态角色:接口或抽象类,负责对象状态定义,并且封装环境角色以实现状态切换
ConcreteState具体状态角色:每个具体状态必须完成两个职责:本状态的行为管理以及趋向状态处理,通俗的说,就是本状态下要做的事情,以及本状态如何过渡到其他状态。
Context环境角色:定义客户端需要的接口,并且负责具体状态的切换。
3、通用源代码
package State;public abstract class State { //定义一个环境角色,提供子类访问 protected Context context; //设置环境角色 public void setContext(Context context){ this.context=context; } //行为1 public abstract void handle1(); //行为2 public abstract void handle2();}
package State;public class ConcreteState2 extends State{ @Override public void handle1() { //本状态下必须处理的逻辑 } @Override public void handle2() { //设置当前状态为stat2 super.context.setCurrentState(Context.STATE2); //过渡到state2状态,由Context实现 super.context.handle2(); }}
package State;public class ConcreteState1 extends State{ @Override public void handle1() { //设置当前状态为stat1 super.context.setCurrentState(Context.STATE1); //过渡到state1状态,由Context实现 super.context.handle1(); } @Override public void handle2() { //本状态下必须处理的逻辑 }}
package State;public class Context { //状态定义 public final static State STATE1=new ConcreteState1(); public final static State STATE2=new ConcreteState2(); //当前状态 private State CurrentState; //获得当前状态 public State getCurrentState(){ return CurrentState; } //设置当前状态 public void setCurrentState(State currentState){ this.CurrentState=currentState; //切换状态 this.CurrentState.setContext(this); } //行为委托 public void handle1(){ this.CurrentState.handle1(); } public void handle2(){ this.CurrentState.handle2(); } }
package State;public class Main { public static void main(String[] args){ //定义环境变量 Context context=new Context(); //初始化状态 context.setCurrentState(new ConcreteState1()); //行为执行 context.handle1(); context.handle2(); }}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。