首页 > 其他 > 详细

设计模式之状态模式

时间:2014-08-19 12:31:34      阅读:266      评论:0      收藏:0      [点我收藏+]

1、定义

允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类

2、通用类图


bubuko.com,布布扣

状态模式的核心是封装,状态的变更引起了行为的变更,从外部看起来就好像这个对象对应的类发生了改变一样。

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();
    }

}

设计模式之状态模式,布布扣,bubuko.com

设计模式之状态模式

原文:http://www.cnblogs.com/limiracle/p/3921660.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!