zoukankan      html  css  js  c++  java
  • State

    定义

      状态模式属于对象的行为模式。

      状态模式允许一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样。这个模式将状态封装成为单独的类,并将动作委托到代表当前状态的对象。  

      一个对象的行为取决于一个或多个动态变化的属性,这样的属性叫做状态,这样的对象叫做有状态的对象。

    结构和角色

      

      抽象状态(State)角色 : 定义一个接口,用以封装环境对象的一个特定的状态所对应的行为。  

      具体状态(ConcreteSate)角色 : 每一个具体状态类都实例了环境的一个状态所对应的行为。

      环境(Context)角色 : 保留各种具体状态对象,和定义当前状态对象。 此类的行为委派给具体State对象。

    什么时候使用状态模式 

       一个对象的行为依赖于它所处的状态,对象的行为必须随着其状态的改变而改变。

      对象在某个方法里依赖一重或多重的条件转移语句。状态模式把条件转移语句的每一个分支都包装到一个单独的类里。

    应用

       状态模式需要对每一个系统可能取得的状态创立一个状态类的子类。当系统的状态变化时,系统便改变所选的子类。所有与一个特定的状态有关的行为都被包装到一个特定的对象里面,使得行为的定义局域化。

      状态改变,不必采用过程性的处理方式,来改变行为。

    优缺点

      便于维护和扩展,遵守开闭原则,

      缺点是,会造成大量的小的状态类。

     这个模式的结构图和策略模式的结构图是一样的,不过他们的意图不一样。

       环境角色是否有明显的状态和状态的过渡。如果环境角色只有一个状态, 那么应当使用策略模式。

       策略模式,一旦环境角色选择了一个具体策略类,那么在整个环境类的生命周期里它都不会改变这个具体策略类。

       状态模式,环境角色有明显的状态转移,在环境类的生命周期里面,会有几个不同的状态对象被使用。

  • 相关阅读:
    docker使用以及dockerfile编写
    c++:空构造空析构的益处之一
    python os.path模块常用方法详解(转)
    enlarge your dataset
    解决镜像无法删除的问题multiple repositories
    Ubuntu 14.04 LTS 安装Docker(转)
    忘记root密码,怎么办
    [Unity3D]降低向Shader中传值的开销
    Shader预处理宏、内置状态变量、多版本编译等
    Unity Shader 常用函数列表
  • 原文地址:https://www.cnblogs.com/shouwangzhe-/p/3697458.html
Copyright © 2011-2022 走看看