[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 State | Event | Destination 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

浙公网安备 33010602011771号