阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。 【说明】 某大型商场内安装了多个简易的纸巾售卖机,自动售出2元钱一包的纸巾,且每次仅售出一包纸巾。纸巾售卖机的状态如图10.37所示。 采用状态(State)模式来

admin2018-07-25  20

问题 阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。
    【说明】
    某大型商场内安装了多个简易的纸巾售卖机,自动售出2元钱一包的纸巾,且每次仅售出一包纸巾。纸巾售卖机的状态如图10.37所示。

采用状态(State)模式来实现该纸巾售卖机,得到如图10.38所示的类图。其中类State为抽象类,定义了投币、退币、出纸巾等方法接口。类SoldState、SoldOutState、NoQuarterState和HasQuarterState分别对应图10.37中纸巾售卖机的4种状态:售出纸巾、纸巾售完、没有投币、有2元钱。

【Java代码】
Import java.util.*
interface State{
    public void insertQuarter();  //投币
    public void ejectQuarter();  //退币
    public void turnCrank();    //按下“出纸巾”按钮
    public void dispense();    //出纸巾
}
class TisSueMachime{
    _____(1)soldOutState,noQuarterstate,hasQuarterState,soldState,state;
    State=soldOutState;
    int count=0;  //纸巾数
    public TissueMachine(int number){/*实现代码省略*/}
    public State  getHasQuarterState()  {return hasQuarterState,}
    public State  getNOQuarterState()  {return  noQuarterState;}
    public State getSoldState(){return soldState;}
    public State getSoldOutState()  {return SoldOutState;}
    int getCount(return count;}
    //其余代码省略
};
Class NoQuarterState implement State{
    TiSsueMachime tiSsueMachime;
    publiC void  insertQuarter(){
    tiSsueMachine.SetState(______(2));
    }
//构造方法以及其余代码省略
}
Class  HasQuarterState  implement  State  {
    TiSsueMachine tiSsueMachine;
    public void ejectQuarter(){
  tissueMachine.setState____(3);
    }
//构造方法以及其余代码省略
}
Class  SoldState  implement  State  {
    TissueMachine tissueMachine;
    public Void dispense(){
    if(tissueMachine.getCount()>0){
    tissueMachine.setstate____(4);
    }
    else{
    tissueMachine.setstate(____(5) );
      }
    }
  }

选项

答案(1)State (2)tissueMachine.getHasQuarterState()或new HasQuarterState()或tissueMachine.HasQuarterState() (3)tissueMachine.getNoQuarterState()或new NoQuarterState()或tissueMachine.NoQuarterState() (4)tissueMachine.getNoQuarterState()或new NoQuarterState()或tissueMachine.NoQuarterState() (5)tissueMachine.getSoldOutState()或new SoldOutState()或tissueMachine.SoldOutState()

解析 空(1):根据题意,本题使用的是状态模式,判断纸巾售卖机的状态,根据不同的状态执行不同的动作。State定义了纸巾售卖机所对应的一些状态,如售出纸巾、纸巾售完等。类SoldOutState、NoQuarterState、}tasQuarterState、SoldState均由类State派生而来。
    空(2):public void insertQuarter()定义了一个“投币”的方法,即在“没有投币”状态下,用户投币的方法。tissureMachine.setState是改变纸巾售卖机的状态,此时,用户已投入2元钱,故将此时的状态改为“有2元钱”的状态,纸巾售卖机调用“有2元钱”状态的方法即可。
    空(3):public void ejectQuarter()定义了一个“退币”的方法,即在“有2元钱”状态下,用户按下退币按钮,纸巾售卖机将此时的状态改为“没有投币”状态,故直接调用NoQuarterState()即可。
    空(4):根据纸巾售卖机状态图可知,当售出纸巾并且纸巾数量仍大于0时,将返回“没有投币”状态。同空(3)的分析,此处应调用NoQuarterState()。
    空(5):根据纸巾售卖机状态图可知,当售出纸巾并且纸巾数量等于0时,将返回“纸巾售完”状态。此处用了if…else…判断语句,当纸巾数量仍大于0时,返回“没有投币”状态,否则,纸巾数量一定等于0。空(5)处是else下的一条语句,故此处是判断count为0时纸巾售卖机的状态,显然应调用SoldOutState()。
转载请注明原文地址:https://kaotiyun.com/show/L7DZ777K
0

相关试题推荐
最新回复(0)