某大型商场内安装了多个简易的纸巾售卖机,自动出售2元钱一包的纸巾,且每次仅售出一包纸巾。纸巾售卖机的状态图如图6-1所示。 采用状态(State)模式来实现该纸巾售卖机,得到如图6-2所示的类图。其中类State为抽象类,定义了投币、退币、出纸巾等方法接口。类SoldState、SoldOutState、NoQuarterState和HasQuarterState分别对应图6-1中纸巾售卖机的4种状态:售出纸巾、纸巾售完、没有投币、有2元钱。 【Java代码】 import java.util.*; interface State{ public void insertQuarter( );//投币 public void ejectQuarter( );//退币 public void turnCrank( );//按下“出纸巾”按钮 public void dispense( );//出纸巾 } class TissueMachine{ (1)soldOutState,noQuarterState,hasQuarterState,soldState,state; state=soldOutState; 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((2)); } //构造方法以及其余代码省略 } class HasQuarterState implements State{ TissueMachine tissueMachine; public void ejectQuarter( ){ tissueMachine.setState((3)); } //构造方法以及其余代码省略 } class SoldState implements State{ TissueMachine tissueMachine; public void dispense( ){ if(tissueMachine.getCount( )>0){ tissueMachine.setState((4)); }else{ tissueMachine.setState((5));} } }