软件设计师2007 年11月下午试题6(C++语言 责任链模式)

【说明】

      已知某企业的采购审批是分级进行的,即根据采购金额的不同由不同层次的主管人员来审批,主任可以审批5万元以下(不包括5万元)的采购单,副董事长可以审批5万元至10万元(不包括10万元)的采购单,董事长可以审批10万元至50万元(不包括50万元)的采购单,50万元及以上的采购单就需要开会讨论决定。

采用责任链设计模式(Chain of Responsibility)对上述过程进行设计后得到的类图如图6-1所示。

[C++代码]

#include <string>

#include <iostream>

using namespace std;

class PurchaseRequest {

public:

    double Amount;    // 一个采购的金额

    int Number;       // 采购单编号

    string Purpose;     // 采购目的

};

 

class Approver {       // 审批者类

public:

    Approver(){ successor = NULL; }

    virtual void ProcessRequest(PurchaseRequest aRequest){

         if (successor != NULL){  successor->ProcessRequest(aRequest); }

}

 

void SetSuccessor(Approver *aSuccesssor){ successor = aSuccesssor; }

private:

     Approver::successor;

};

 

class Congress : public Approver {

public:

     void ProcessRequest(PurchaseRequest aRequest){

         if (aRequest.Amount >= 500000){ /* 决定是否审批的代码省略 */ }

         else Approver::ProcessRequest(aRequest);

     }

};

 

class Director : public Approver {

public:

    void ProcessRequest(PurchaseRequest aRequest){  /* 此处代码省略 */ }

};

 

class President : public Approver {

public:

    void ProcessRequest(PurchaseRequest aRequest){  /* 此处代码省略 */  }

};

 

class VicePresident : public Approver {

public:

     void ProcessRequest(PurchaseRequest aRequest){  /* 此处代码省略 */   }

};

 

void main(){

    Congress Meeting;  VicePresident Sam;  Director Larry ;  President Tammy;  

    // 构造责任链

    Meeting.SetSuccessor(NULL); Sam.SetSuccessor(&Tammy);

    Tammy.SetSuccessor(&Meeting); Larry.SetSuccessor(&Sam);

 

    PurchaseRequest aRequest;  // 构造一采购审批请求

    cin >> aRequest.Amount;   // 输入采购请求的金额

    Larry .ProcessRequest(aRequest);  // 开始审批

    return ;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值