Skip to content

Latest commit

 

History

History

state

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

state pattern

有时候一个对象的行为是根据状态决定的,比如对于一个闸机来说,它有关闭和开启的状态,那么当行人进行刷卡的时候,它由关闭的状态变成了开启的状态。行人走过后又变成了关闭状态。

当我们没有使用状态模式的时候,在代码中对闸机的行为是需要很多的if判断的,根据不同的状态变量或者参数来控制闸机的行为。

在《Head First 设计模式》这本书配套代码中给了三份示例,我们看下每份代码分别做了什么:

  • gumball 最原始的方法,使用功能if对状态进行判断处理gumball的行为
  • gumballstate 引入状态模式
  • gumballstatewinner 引入winner状态模式

书中的例子是一个GumBall Machine,口香糖糖果的机器,然后它有一个Crank曲柄,需要转动它才会掉出糖果。

可以看到这个模式将原有GumBall Machine需要做的大量State if判断移动到了每个状态自身去完成了,简化了代码保证了GumBall Machine本身代码整洁的情况下,还让代码的出错概率减小了。因为当你在Gumball Machine中写大量的if判断的时候很容易出错。