糖果机
如下糖果机工作状态图,我们对这个状态图进行编码实现糖果机的工作过程
这个状态图的每个圆圈代表一个状态,可以看到有4个状态同时又4个动作,分别是:“投入1元钱”、“退回1元钱”、“转动曲柄”、“发放糖果”。当要发放糖果的时候需要判断糖果数量是否为0来进入“糖果售磐”或者“没有1元钱”状态。所以有5个状态转换。
接下来我们对状态图进行分析实现编码
①找出状态:没有1元钱、有1元钱、糖果售出、糖果售磐。
②创建实例变量持有当前状态,定义每个状态的值。
static int SOLD_OUT=0; static int NO_ONERMB=1; static int HAS_ONERMB=2; static int SOLD=3; int State=SOLD_OUT;
③将系统中的动作整合起来:投入1元、退回1元、转动曲柄、发放糖果。
以投入1元为例
public void InsertOneRMB() { if (State == HAS_ONERMB) { Console.WriteLine("已经投入了,不能再投入"); } else if (State == SOLD_OUT) { Console.WriteLine("糖果已经售磐,不能再投入"); } else if (State == SOLD) { Console.WriteLine("请稍后投入,正在发放糖果"); } else if (State == NO_ONERMB) { State = HAS_ONERMB; Console.WriteLine("你投入了1元钱"); } }
根据分析我们就可以写出糖果机的代码,其他几个动作具体实现就不再写了。
1 class GumballMachine 2 { 3 readonly static int SOLD_OUT = 0; 4 readonly static int NO_ONERMB = 1; 5 readonly static int HAS_ONERMB = 2; 6 readonly static int SOLD = 3; 7 8 int State = SOLD_OUT; 9 int Count = 0;