状态模式

来源:互联网 发布:传智播客python怎么样 编辑:程序博客网 时间:2024/05/19 17:49

一、什么是状态模式? 

状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式。

结构图:


具有的角色:

环境(Context)角色,也成上下文:定义客户端所感兴趣的接口,并且保留一个具体状态类的实例。这个具体状态类的实例给出此环境对象的现有状态。
抽象状态(State)角色:定义一个接口,用以封装环境(Context)对象的一个特定的状态所对应的行为。
具体状态(ConcreteState)角色:每一个具体状态类都实现了环境(Context)的一个状态所对应的行为。

二、代码类

环境角色类

public class Context {    //持有一个State类型的对象实例    private State state;    public void setState(State state) {        this.state = state;    }    /**     * 用户感兴趣的接口方法     */    public void request(String sampleParameter) {        //转调state来处理        state.handle(sampleParameter);    }}
抽象状态类

public interface State {    /**     * 状态对应的处理     */    public void handle(String sampleParameter);}
具体状态类
public class ConcreteStateA implements State {    @Override    public void handle(String sampleParameter) {                System.out.println("ConcreteStateA handle :" + sampleParameter);    }}
public class ConcreteStateB implements State {    @Override    public void handle(String sampleParameter) {                System.out.println("ConcreteStateB handle :" + sampleParameter);    }}
客户端类
public class Client {    public static void main(String[] args){        //创建状态        State state = new ConcreteStateB();        //创建环境        Context context = new Context();        //将状态设置到环境中        context.setState(state);        //请求        context.request("test");    }}

  从上面可以看出,环境类Context的行为request()是委派给某一个具体状态类的。通过使用多态性原则,可以动态改变环境类Context的属性State的内容,使其从指向一个具体状态类变换到指向另一个具体状态类,从而使环境类的行为request()由不同的具体状态类来执行。

三、使用场景

一个对象的行为取决于他的状态,并且它必须在运行时根据状态改变它的行为;
一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 肛裂大便有血怎么办 生完宝宝肛门痛怎么办 肛周脓肿出血了怎么办 胃胀怎么办简单的办法 吃多了胃胀难受怎么办 胃窦炎胆汁反流怎么办 怀孕总胆汁酸高怎么办 胃里胆汁反流怎么办 苦胆水吐出来了怎么办 喝多了吐胆汁怎么办 吐出黄水苦水是怎么办 喝酒喝的一直吐怎么办 孕期总胆汁酸高怎么办 孕早期胆汁酸高怎么办 孕妇总胆汁酸高怎么办 宝宝一天吐了6次怎么办 肛周脓肿破了怎么办 肛周脓肿发烧了怎么办 肛周脓肿便血该怎么办 婴儿得肛周脓肿怎么办 水痘长在龟头上怎么办 轻度萎缩性胃炎伴肠化怎么办 肺癌晚期腿肿了怎么办 胸骨剑突按压痛怎么办 22岁有白头发怎么办 血热导致掉头发怎么办 36岁脱发严重该怎么办 血热引起的脱发怎么办 头发掉的好厉害怎么办 胃热导致的口臭怎么办 肝火和胃火旺盛怎么办 2月宝宝舌苔厚白怎么办 小孩舌头咬破了怎么办 两岁宝宝不说话怎么办 4岁半说话不清楚怎么办 10小孩说话不清怎么办 2岁宝宝说话结巴怎么办 4岁宝宝说话结巴怎么办 3岁幼儿说话结巴怎么办 三岁宝宝说话结巴怎么办 6岁宝宝说话结巴怎么办