一、状态模式
能根据内部状态的变化,改变对象的行为,看起来好像修改了类
状态模式
二、示例
智能糖果机:需要设计一款自助购买的糖果机,糖果机的状态有
准备使用(接下来可投入硬币)
投入硬币(接下来可摇动把手或者退出硬币)
售出糖果(接下来可恢复使用或者售罄)
售罄状态
使用传统的面向对象模式,只需定义一个糖果机的对象,内部根据不同的状态进行不同的操作处理
/**
* 面向对象模式,糖果机
*/
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!");