状态(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; } }