状态模式

概述

  • 状态模式的关键时将对象的状态封装成为独立的类,对象调用方法时,可以委托当前对象所具有的状态调用相应的方法,使当前对象看起来好像修改了它的类。

状态模式的结构

状态模式包含三种角色。

  • 环境(Context)
  • 抽象状态(State)
  • 具体状态(Concrete State)

环境(Context)

  • 环境是一个类。
  • 该类含有抽象状态(State)声明的变量,可以引用任何具体状态类的实例。用户对该环境(Context)类的实例在某种状态下的行为感兴趣。

抽象状态(State)

  • 抽象状态是一个接口或抽象类。
  • 抽象状态中定义了与环境(Context)的一个特定状态相关的若干个方法。

具体状态(Concrete State)

  • 具体状态是实现(扩展)抽象状态(抽象类)的类。

状态模式的优点

  • 使用一个类封装对象的一种状态,很容易增加新的状态。
  • 在状态模式中,环境(Context)中不必出现大量的条件判断语句。环境(Context)实例所呈现的状态变得更加清晰、容易理解。
  • 使用状态模式可以让用户程序很方便地切换环境(Context)实例的状态。
  • 使用状态模式不会让环境(Context)的实例中出现内部状态不一致的情况。
  • 当状态对象没有实例变量时,环境(Context)的各个实例可以共享一个状态对象。

适合状态模式的情景

  • 一个对象的行为依赖于它的状态,并且它必须在运行时根据状态改变它的行为。
  • 需要编写大量的条件分支语句来决定一个操作的行为,而且这些条件恰好表示对象的一种状态。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。