JAVA设计模式:状态模式设计模式:状态模式
一、引出状态模式
假设我们现在有一个糖果机项目,那么我们知道正常一般糖果机提供给用户的行为有这么几种:投入硬币、转动曲柄、退出硬
币几种行为;那么糖果机呢一般有这几中状态,待机状态、持有硬币的准备状态、运行状态即正在售出状态和初始状态 这么
几种正常状态。 我们发现处于不同状态的时候,持有的行为是不一样的,图如下:
如果我们采用传统的方法来写代码,那么在投入硬币这个行为操作的时候,我们会进行状态的判断,只有在处于待机状态情况
下这种行为是正常的,而其他则非正常,那么其他行为也一样,都需要去先判断下当前的状态来进行操作。得到的代码则为:
package study.designmode.statemode;
public class CandyMachine {
final static int SoldOutState = 0; //初始状态
final static int OnReadyState = 1; //待机状态
final static int HasCoin = 2; //准备状态
final static int SoldState = 3; //售出状态
private int state = SoldOutState; //变量,用于存放当前的状态值
private int count = 0; //糖果的数目
public CandyMachine(int count) {
this.count = count;
if (count > 0) {
state = OnReadyState;
}
}
//投入硬币行为的时候,通过判断当前的状态来匹配所有的状态.
public void insertCoin() {
switch (state) {
case SoldOutState:
System.out.println("you can't insert coin,the machine sold out!");
break;
case OnReadyState: //只有在待机状态的时候,投入硬币行为正确,并将状
态改变为准备状态
state = HasCoin;
System.out
.println("you have inserted a coin,next,please turn crank!");
break;
case HasCoin:
System.out.println("you can't insert another coin!");
break;
case SoldState:
System.out.println("please wait!we are giving you a candy!");
break;
}
}
//回退硬币
public void returnCoin() {
switch (state) {
case SoldOutState:
System.out
.println("you can't return,you haven't inserted a coin yet!");
break;
case OnReadyState:
System.out.println("you haven't inserted a coin yet!");