Head First设计模式——状态模式

糖果机

  如下糖果机工作状态图,我们对这个状态图进行编码实现糖果机的工作过程

 这个状态图的每个圆圈代表一个状态,可以看到有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;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值