[Ruby on Rails] [state_machine][002]例一

States, Transitions, and Events

UML图:超市购物图

Waiting和Paid是States。

从State到State的箭头表示Transitions。

箭头上的标识文字表示Events。

Events可以调用Transitions在States之间转换。

例如:如果现在处于Waiting State,现在触发了dollar Event,结果State变为了Paid。如果此时触发了selection Event,结果State回到Waiting。

1、刚开始你处于 Waiting 状态,你在超市里不停的选购商品,也就是不停的触发selection事件,持续处于Waiting状态。

2、你打算结帐,于是触发了dollar事件,状态由Waiting转为了Paid。

3、你突然发现漏买了东西,你于是取消了结帐,再次返回超市购物,于是触发了selection事件,状态由Paid转为Waiting。

4、你不停的重复1、2步,直到你结帐。

5、结帐,状态为Paid,你不停的触发dollar事件,你持续处于Paid状态。

Origin StateEventDestination State
Waiting dollar Paid
Paid selection Waiting
Waiting selection Waiting
Paid dollar Paid

在Ruby中定义:

require 'rubygems'
require 'state_machine'

class Buy
  
  state_machine :initial => :waiting do
    event :selection do
      transition :waiting => same,:paid => :waiting
    end
    
    event :dollar do
      transition :waiting => :paid,:paid => same
    end
  end
end

b=Buy.new
puts b.state
b.selection
puts b.state
b.dollar
puts b.state
b.dollar
puts b.state
b.selection
puts b.state

 运行结果:

waiting
waiting
paid
paid
waiting
posted @ 2011-07-18 16:52  承古韵  阅读(626)  评论(0编辑  收藏  举报