定义:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类
题目:某大型商场内安装了多个简易的纸巾售卖机,自动出售2元钱一包的纸巾,且每次仅出售一包纸巾,状态图如下:
采用状态模式来实现该纸巾售卖机,其中类SoldState、SoldOutState、NoQuarterState和HasQuarterState分别表示售出纸巾、纸巾售完、没有投币、有2元钱
import java.util.*;
interface State
{public void insertQuarter(); //投币
public void ejectQuarter(); //退币
public void turnCrank(); //按下“出纸巾”按钮
public void dispense(); //出纸巾
}
class TissueMachine
{ State soldOutState,noQuarterState,hasQuarterState,soldState,state;
//默认修饰符:在同一个包中的其他类中访问
state=soldOutState;
//初始化,使state保持有效状态对象,有助于管理机器初始行为和后续转换
int count=0; //纸巾数
public TissueMachine(int numbers){/实现代码省略/}
public State getHasQuarterState(){return hasQuarterState;}
public State getNoQuarterState(){return noQuarterState;}
public State getSoldState(){return soldState;}
public State getSoldOutState(){return soldOutState;}
public int getCount(){return count;}
//其余代码省略
}
class NoQuarterState implements State
{TissueMachine tissueMachine;
public void insertQuarter(){
tissueMachine.setState(tissueMachine.getHasQuarterState);
} //set方法被省略了,方法可以作为参数调用
//构造方法及其余代码省略
}
class HasQuarterState implements State
{
TissueMachine tissueMachine;
public void ejectQuarter(){
tissueMachine.setState(tissueMachine.NoQuarterState);
}
//构造方法及其余代码省略
}
class SoldState implements State
{TissueMachine tissueMachine;
public void dispense(){
if (tissueMachine.getCount()>0)
{ tissueMachine.setState(tissueMachine.getNoQuarterState);
}
else {
tissueMachine.setState(tissueMachine.getSoldOutState);
}
}
}