[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