Head First设计模式C++实现--第十章:状态(State)模式

状态(State)模式

一、问题的提出

糖果机的CEO正在使用一款软件,现在需要让糖果机控制器如下图般工作:

二、一般设计思路

1、找出所有状态

没有25分钱、有25分钱、糖果售罄、售出糖果

2、创建实例变量来持有目前的状态,定义每个状态的值

#define SOLD_OUT 0//糖果售罄
#define NO_QUARTER 1//没有25分钱
#define HAS_QUARTER 2//有25分钱
#define SOLD 3//售出糖果

3、创建状态机类

现在,我们创建一个类,它的作用对象就是一个状态机。对每一个动作,我们都创建了一个对应的方法,这些方法利用条件语句来决定在每个状态内什么行为是恰当的。比如对“投入25分钱”这个动作来说,我们可以把对应的方法写成下面的养子:


//投入硬币动作
void insertQuarter()
{
	if(HAS_QUARTER == state)
	{
		//当前状态是“有硬币”
		cout<<"You can't insert another quarter"<<endl;
	}
	else if(SOLD_OUT == state)
	{
		//当前状态是“糖果售罄”
		cout<<"You can't insert a quarter, the machine is sold out"<<endl;
	}
	else if(SOLD == state)
	{
		//当前状态是“售出糖果”
		cout<<"Please wait,we're already giving you a gumball"<<endl;
	}
	else if(NO_QUARTER == state)
	{
		//当前状态是“没有硬币”
		state = HAS_QUARTER;
		cout<<"You inserted a quarter"<<endl;
	}
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值