试题与答案

[说明] 已知某企业的采购审批是分级进行的,即根据采购金额的不同由不同层次的主管人

题型:问答题

题目:

[说明]
已知某企业的采购审批是分级进行的,即根据采购金额的不同由不同层次的主管人员来审批。主任可以审批5万元以下(不包括5万元)的采购单,副董事长可以审批5万元至10万元(不包括10万元)的采购单,董事长可以审批10万元至50万元(不包括50万元)的采购单,50万元及以上的采购单就需要开会讨论决定。
采用责任链设计模式(Chain of Responsibility)对上述过程进行设计后得到的类图如图3-27所示。


[C++代码]

答案:

参考答案:试题6是考查设计模式中的Chain of Responsibility(职责链)模式的案例分析题,Chain of Responsibility(职责链)模式的设计意图是:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。换言之,其目的是为了将一个请求发送给一个对象集合,对象被组织成一条链,而负责处理该请求的对象将获取请求消息并加以处理,其余对象则仅仅负责将该请求消息按照责任链的顺序传递到下一个对象。因此责任链模式的关键在于组织不同的对象成为一条链并传递消息。
(1)空缺处位于条件判断if (successor!=NULL)内,其功能是判断当前对象是否存在后继对象。如果存在,则按照责任链设计模式,可以把请求消息进行传递,即调用后继对象的ProcessRequest方法。
(2)空缺处要求填写successor的类型,因为责任链模式中的每一个对象都继承自同一个父类,在本试题中对应于Approver类型。
(3)空缺处位于Congress类的ProcessRequest方法中,该方法表示处理外界的请求,而else处理模块的功能是表明Congress对象不处理审批金额大于50万元的请求,因此,Congress对象应该将该请求转发到下一个对象进行处理,可以直接调用父类的ProcessRequest方法。
(4)~(6)空缺处则主要用来将各种对象串接成一个链,根据题干给出的不同层次主管人员的审批额度“主任:5万元以下,副董事长:5万元~10万元,董事长:10万元~50万元,开会讨论:50万元及以上”,对象在责任链中的顺序应该为:Director Larry→Vicepresident Sam→President Tammy→Congress Meeting。由于主任的审批额度最小,因此审批的请求应该从主任Lany开始,即(7)空缺处所填写的内容是Lany。

试题推荐
微信公众账号搜索答案