zoukankan      html  css  js  c++  java
  • 状态模式

    状态模式定义:
    英文定义: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. 一个操作中含有庞大的多分支结构,而且这些分支决定于对象的状态。

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

    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);
         }
    }
    public interface LightState {
    
        void PressSwich(Light light);
    
    }
    public class LightOn implements LightState {
    
        @Override
        public void PressSwich(Light light) {
            light.setState(new LightOff());
            System.out.println("关灯了...");
    
        }
    
    }
    public class LightOff implements LightState {
    
        @Override
        public void PressSwich(Light light) {
            light.setState(new LightOn());
            System.out.println("灯打开了...");
        }
    
    }
    public class Application {
        public static void main(String[] args) {
            Light light = new Light(new LightOff());
            light.PressSwich();
            light.PressSwich();
        }
    }
  • 相关阅读:
    Java线程安全和非线程安全
    时间戳获取(周,年,月,日)
    spring+spring 日志输出
    Spring+springMvc+Mybatis
    关于mysql处理百万级以上的数据时如何提高其查询速度的方法
    Tomcat 详解
    理解 $_POST、$_GET 、php://input
    php编译参数注解--不明白许多参数的作用 慎用 –with-curlwrappers参数【转载】
    centos6.5编译安装php[整理一]
    ubuntu16.04 安装chrome 和 phpstorm
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/7265771.html
Copyright © 2011-2022 走看看