阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。 【说明】 已知某企业的采购审批是分级进行的,即根据采购金额的不同由不同层次的主管人员来审批,主任可以审批5万元以下(不包括5万元)的采购单,副董事长可以审批5万元至10万元(

admin2018-07-23  22

问题 阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。
  【说明】
  已知某企业的采购审批是分级进行的,即根据采购金额的不同由不同层次的主管人员来审批,主任可以审批5万元以下(不包括5万元)的采购单,副董事长可以审批5万元至10万元(不包括10万元)的采购单,董事长可以审批10万元至50万元(不包括50万元)的采购单,50万元及以上的采购单就需要开会讨论决定。
    采用责任链设计模式(Chain of Responsibility)对上述过程进行设计后得到的类图如题图6-1所示。

【Java代码】
class  PurchaseRequest  {
public double Amount;    //一个采购的金额
public int Number;    //采购单编号
public String Purpose;    //采购目的
};
class Approver{    //审批者类
public  Approver(){    successor=null;  }
public  void ProcessRequest(PurchaseRequest aRequest){
    if(successor!=null){successor.____(1);  }
    }
public  void SetSucces sor(Approver aSuccesssor){successor=aSuccesssor; }
private  ____(2)  successor;
};
class CongresS extends Approver {
public  void ProcessRequest(PurchaseRequest  aRequest) {
    if(aRequest.Amount>=500000){/*决定是否审批的代码省略*/    }
    else  ____(3).ProcessRequest(aRequest);
    }
  };
  class Director extends Approver{
  public  void ProcessRequest(PurchaseRequest  aRequest){  /*此处代码省略*/
    }
  };
  class President extends Approver {
  public void Proces sRequest(PurchaseRequest aRequest){/*此处代码省略*/ }
  };
  class VicePresident extends Approver {
  public void ProcessRequest(PurchaseRequest aRequest){/*此处代码省略*/}
  };
  public class rs {
    public static void main(String [] args)throws IOException {
    Congress Meeting=new Congress();
    VicePresident Sam=new VicePresident();
    Director Larry=new Director();
    President Tammy=new President();
    //构造责任链
    Meeting.SetSuccessor(null);Sam.SetSucces sor(____(4) );
    Tammy.SetSuccessor(____(5)); Larry.SetSuccessor(____(6));
    //构造一采购审批请求
    PurchaseRequest  aRequest  =new  PurchaseRequest();
    BufferedReader br=
new BufferedReader(new InputStreamReader(System.in));
    aRequest.Amount=Double.parseDouble(br.readLine());
    ____(7).ProcessRequest(aRequest);   //开始审批
    return;
    }
}

选项

答案(1)ProcessRequest(aRequest) (2)Approver (3)super (4)Tammy (5)Meeting (6)Sam (7)Larry

解析 本题以用Java解决某企业的采购审批分级为背景,考查考生对面向对象程序设计类的用例和继承,程序解释如下。
if(succesSor!=null){successor.(1)ProcessRequest(aRequest);}
/*Chain of Responsibility(CoR)是用一系列类(classes)试图处理一个请求aRequest,这些类之间是一个松散的耦合,唯一共同点是存它们之间传递aRequest。也就是说,来了一个请求,Director类先处理,如果没有处理,就传递到VicePresident类处理,如果还没有处理,就传递到President类处理,构成责任链。审批者类定义一个虚函数,其子类可以重载该虚函数,用于处理采购请求,如果继任者不为窄,则执行相应审批者类的处理采购请求的函数ProcessRequest(aRequest)。*/
    }
public void SetSuccessor(Approver aSuccesSsor){successot=aSuccesssor;}
private  (2)  Approver successor;   /*注意到此处成员变量为私有属性,只能存Approver类中使用。由void SetSuccesSOt(Approver aSuccessor){succesSor=aSuccessor;}中的参数是Approver类型,再由successot=aSuccessor可知,successor也应为Approver类型,否则无法赋值。*/
};
class Congress extends Approver {
public void ProcessRequest(PurchaseRequest  aRequest){
    if(aRequest.Amount>=500000){/*决定是否审批的代码省略*/    }
    eise  *3)super.ProcessRequest(aRequest); /*该类只处理50万元及以上的
采购请求这种情况,如果是50万元以下,则需交给其他类处理。由于此处调用的是父类中的成员函数
void ProcessRequest(PurchaseRequest aRequest),故需super.ProcessRequest
(aRequest),此函数将请求传递给下一个继任者,即相应的予类。*/
    }
};
public class rs {
    public static void main(String[]args)throws IOException{
    Congress Meeting=new Congress();
    VicePresident Sam=new VicePresident();
    Director Larry=new Director();
    President Tammy=new President();
    //构造责任链
    Meeting.SetSuccessor(null);Sam.SetSuccessor((4)Tammy);
    Tammy.SetSuccessor((5)Meeting);Larry.SetSuccessor((6)Sam);
/*由Approver类中的函数void SetSuccessor(Approver aSuccessor){successor=aSuccessor;}可知,这三处的参数值都是Approver或者其子类类型的对象,由于是一种责任链,当Director类的对象Larry不能处理该请求时,必须将该请求传给上一级,即VicePresident类的对象Sam,此时需将该继任者的地址传给Director类的对象Larry,否则无法传递该请求。
同理,其他上一级的对象也是如此。*/
    //构造一采购审批请求
    PurchaseRequest  aRequest =new  PurchaseRequest();
    BufferedReader  br =  new    BufferedReader(new  InputStreamReader
(System.in));
    aRequest.Amount=Double.parseDouble(br.readLine());
    (7)Larry.ProcessRequest(aRequest);
    /*开始审批。一般采购请求是先由Director类处理,看金额是否满足,不满足再交由上一级的VicePresident类处理,不满足再如此传递下去。由上述创建的类对象Director Larry可知,此处应填Larry.ProcessRequest(aRequest).*/
    return;} }
转载请注明原文地址:https://kaotiyun.com/show/4KDZ777K
0

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