[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状态。

WaitingdollarPaidPaidselectionWaitingWaitingselectionWaitingPaiddollarPaid

Origin StateEventDestination State

在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 endendb=Buy.newputs b.stateb.selectionputs b.stateb.dollarputs b.stateb.dollarputs b.stateb.selectionputs b.state

 运行结果:

waitingwaitingpaidpaidwaiting

分享给朋友:
------分隔线----------------------------
您可能感兴趣的文章:
随机阅读: