状态模式 -- State

2017-04-14 19:54:26   最后更新: 2017-04-14 19:54:26   访问数量:206




很多情况下,对象的行为依赖于对象的状态,例如对于电商的订单处理系统,订单是否可以支付依赖于订单是否处于待支付状态,对于不同的状态需要进行不同的处理方式

State 模式就描述了对象如何在每一种状态下表现出不同的行为,他是通过一个 State 对象来表示目标对象的状态

 

如上所述,State 模式主要解决的是对象行为取决于它的状态的问题,需要根据不同的状态动态改变他的行为

对于一个含有庞大的多分支条件语句,每个分支都依赖于对象的某些状态,State 模式将会很大程度上优化系统,让系统便于理解

State 模式将每一个状态条件放入不同的类中,从而实现对具体行为的封装和隐藏

 

 

 

由上图所示,State 模式有以下组件构成:

  • Context -- 定义客户感兴趣的接口,维护了一个 ConcreteState 子类实例,这个实例定义了当前状态
  • State -- 抽象状态类,定义了与 Context 的一个特定状态相关的行为
  • ConcreteState -- 都继承自 State,每一个子类实现一个与 Context 的一个状态相关的行为

 

Context 将于状态相关的请求委托给当前的 ConcreteState 对象处理,ConcreteState 对象决定哪个状态进行什么行为,从而实现了精细的管理和完备的封装

通常,状态的变化由 Context 决定,他动态的更新自己的 state 成员,对于复杂的情况,Context 需要提供一个状态更新接口,由 State 对象来设定 Context 的状态

 

State 模式的优势是非常明显的:

  1. 状态相关的行为被局部化,不同状态的行为被分割开来,增加新的状态和行为变得容易,如果状态的判断和行为都放在 Context 中,那么复杂的处理逻辑是很难维护的
  2. 状态的转换变得显式化,通过引入独立的状态对象,可以很清晰的了解当前的状态信息
  3. 通常,状态类可以完全以他们的类型编码,来让各个 Context 对象共享,通过 Flyweight 模式和 Singleton 模式可以实现系统的轻量化

 






读书笔记      技术帖      龙潭书斋      状态      面向对象      oop      设计模式      design pattern      行为模式      状态模式      state     


京ICP备15018585号