前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >状态模式

状态模式

作者头像
卡尔曼和玻尔兹曼谁曼
发布2019-01-22 11:16:38
5810
发布2019-01-22 11:16:38
举报

状态模式定义: 英文定义:The State Pattern allows an object to alter its behavior when its internal state changes. The object will appear to change its class. 中文定义:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。

状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。

状态模式UML类图如下(摘自《Head First Design Pattern》):

状态模式
状态模式

有没有发现和策略模式的类图及其相似,其实状态模式和策略模式是一对孪生兄弟,其形式完全一致,只是使用意图不一样而已。

状态模式适用场景: 1. 一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为 2. 一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。

下面看一个示例,以灯的开关状态为例:

代码语言:javascript
复制
public class Light {
     private LightState state;

     public Light(LightState state)
     {
         this.state = state;
     }

     public LightState getState() {
        return state;
    }

    public void setState(LightState state) {
        this.state = state;
    }

    public void PressSwich()
     {
         state.PressSwich(this);
     }
}
代码语言:javascript
复制
public interface LightState {

    void PressSwich(Light light);

}
代码语言:javascript
复制
public class LightOn implements LightState {

    @Override
    public void PressSwich(Light light) {
        light.setState(new LightOff());
        System.out.println("关灯了...");

    }

}
代码语言:javascript
复制
public class LightOff implements LightState {

    @Override
    public void PressSwich(Light light) {
        light.setState(new LightOn());
        System.out.println("灯打开了...");
    }

}
代码语言:javascript
复制
public class Application {
    public static void main(String[] args) {
        Light light = new Light(new LightOff());
        light.PressSwich();
        light.PressSwich();
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015年07月20日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档