封装状态的转变过程
概念理解
-
定义:允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。
state.png
Context: 环境类,有时候可以充当状态管理器(State Manager)的角色
State: 抽象状态类
ConcreteState: 具体状态类
- 种类
- 简单状态模式:简单状态模式是指状态都相互独立,状态之间无须进行转换
- 可切换状态的状态模式:在实现状态切换时,在具体状态类内部需要调用环境类Context的setState()方法进行状态的转换操作,在具体状态类中可以调用到环境类的方法,因此状态类与环境类之间通常还存在关联关系或者依赖关系
实用和优缺点
-
解决的问题
在很多情况下,一个对象的行为取决于一个或多个动态变化的属性,这样的属性叫做状态,这样的对象叫做有状态的(stateful)对象,这样的对象状态是从事先定义好的一系列值中取出的。当一个这样的对象与外部事件产生互动时,其内部状态就会改变,从而使得系统的行为也随之发生变化。 -
应用实例
OA系统中的单据状态,例如请假单状态
-
优点
封装了转换规则
枚举可能的状态,在枚举状态之前需要确定状态种类
允许状态转换逻辑与状态对象合成一体,而不是某一个巨大的条件语句块 -
缺点
状态模式对"开闭原则"的支持并不太好
增加系统的复杂度,不易理解
网友评论