内容:

某物资管理系统中物资采购需要分级审批,主任可以审批1万元及以下的采购单,部门经理可以审批5万元及以下的采购单,副总经理可以审批10万元及以下的采购单,总经理可以审批20万元及以下的采购单,20万元以上的采购单需要开职工大会确定。现用职责链模式设计该系统。

代码:

#include<iostream>
using namespace std;
class PurchaseRequest {
private:
int money;
public:
PurchaseRequest(int money) {
this->money=money;
}
void setMoney(int money) {
this->money=money;
}
int getMoney(){
return this->money;
}
};
class Leader {
protected:
string name;
Leader *successor;
public:
Leader(string name) {
this->name=name;
}
void setSuccessor(Leader *successor) {
this->successor=successor;
}
virtual void handleRequest(PurchaseRequest *request)=0;
};
class Director:public Leader{
private:
string name;
public:
Director(string name):Leader(name){}
void handleRequest(PurchaseRequest *request) {
// TODO Auto-generated method stub
if(request->getMoney()<=1) {
cout<<"主任"<<this->name<<"审批"<<request->getMoney()<<"万元的采购单"<<endl;
}
else {
if(this->successor!=NULL) {
this->successor->handleRequest(request);
}
}
}
};
class Manager : public Leader{
private:
string name;
public:
Manager(string name):Leader(name){}
void handleRequest(PurchaseRequest *request) {
if(request->getMoney()<=5) {
cout<<"部门经理"<<name<<"审批"<<request->getMoney()<<"万元的采购单"<<endl;
}
else {
if(this->successor!=NULL) {
this->successor->handleRequest(request);
}
}
}
};
class DeputyGeneralManager: public Leader{
private:
string name;
public:
DeputyGeneralManager(string name):Leader(name){}
void handleRequest(PurchaseRequest *request) {
if(request->getMoney()<=10) {
cout<<"副总经理"<<name<<"审批"<<request->getMoney()<<"万元的采购单"<<endl;
}
else {
if(this->successor!=NULL) {
this->successor->handleRequest(request);
}
}
}
};
class GeneralManager: public Leader{
private:
string name;
public:
GeneralManager(string name):Leader(name){}
void handleRequest(PurchaseRequest *request) {
if(request->getMoney()<=20) {
cout<<"总经理"<<name<<"审批"<<request->getMoney()<<"万元的采购单"<<endl;
}
else if(request->getMoney()>20) {
cout<<"总经理"<<name<<"召开职工大会审批"<<request->getMoney()<<"万元的采购单"<<endl;
}
else {
if(this->successor!=NULL) {
this->successor->handleRequest(request);
}
}
}
};
int main(){
Leader *objDirector,*objManager,*objDeputyGeneralManager,*objGeneralManager; objDirector=new Director("张三");
objManager=new Manager("李四");
objDeputyGeneralManager=new DeputyGeneralManager("王五");
objGeneralManager=new GeneralManager("赵六"); objDirector->setSuccessor(objManager);
objManager->setSuccessor(objDeputyGeneralManager);
objDeputyGeneralManager->setSuccessor(objGeneralManager); PurchaseRequest *pr1=new PurchaseRequest(1);
objDirector->handleRequest(pr1);
PurchaseRequest *pr2=new PurchaseRequest(3);
objDirector->handleRequest(pr2);
PurchaseRequest *pr3=new PurchaseRequest(8);
objDirector->handleRequest(pr3);
PurchaseRequest *pr4=new PurchaseRequest(12);
objDirector->handleRequest(pr4);
PurchaseRequest *pr5=new PurchaseRequest(22);
objDirector->handleRequest(pr5);
return 0;
}

运行结果:

c++实现职责链模式--财务审批的更多相关文章

  1. [Python设计模式] 第24章 加薪审批——职责链模式

    github地址:https://github.com/cheesezh/python_design_patterns 题目 用程序模拟以下情景 员工向经理发起加薪申请,经理无权决定,需要向总监汇报, ...

  2. 设计模式24---设计模式之职责链模式(Chain of Responsibility)(行为型)

    1.职责链模式讲解 1.1职责链定义 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. 1.2职责链模式 ...

  3. C#设计模式之二十一职责链模式(Chain of Responsibility Pattern)【行为型】

    一.引言   今天我们开始讲"行为型"设计模式的第八个模式,该模式是[职责链模式],英文名称是:Chain of Responsibility Pattern.让我们看看现实生活中 ...

  4. C#设计模式之二十职责链模式(Chain of Responsibility Pattern)【行为型】

    一.引言 今天我们开始讲“行为型”设计模式的第八个模式,该模式是[职责链模式],英文名称是:Chain of Responsibility Pattern.让我们看看现实生活中的例子吧,理解起来可能更 ...

  5. Java设计模式之责任链模式、职责链模式

    本文继续介绍23种设计模式系列之职责链模式.   什么是链 1.链是一系列节点的集合. 2..链的各节点可灵活拆分再重组.   职责链模式 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间 ...

  6. 行为型模式(八) 职责链模式(Chain of Responsibility)

    一.动机(Motivate) 在软件构建过程中,一个请求可能被多个对象处理,但是每个请求在运行时只能有一个接受者,如果显示指定,将必不可少地带来请求发送者与接受者的紧耦合.如何使请求的发送者不需要指定 ...

  7. C#设计模式学习笔记:(20)职责链模式

    本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/8109100.html,记录一下学习过程以备后续查用. 一.引言 今天我们要讲行为型设计模式的第八个模式--职 ...

  8. 深入浅出设计模式——职责链模式(Chain of Responsibility Pattern)

    模式动机 职责链可以是一条直线.一个环或者一个树形结构,最常见的职责链是直线型,即沿着一条单向的链来传递请求.链上的每一个对象都是请求处理者,职责链模式可以将请求的处理者组织成一条链,并使请求沿着链传 ...

  9. C#设计模式——职责链模式(Chain Of Responsibility Pattern)

    一.概述 在软件开发中,某一个对象的请求可能会被多个对象处理,但每次最多只有一个对象处理该请求,对这类问题如果显示指定请求的处理对象,那么势必会造成请求与处理的紧耦合,为了将请求与处理解耦,我们可以使 ...

随机推荐

  1. Django后台管理的使用

    Django后台管理的使用 参考文章:https://www.runoob.com/django/django-admin-manage-tool.html 1.编写好models 直接在admin. ...

  2. jQuery Validatede 结合Ajax 表单验证提交

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. 微信小程序文件上传结合lin ul

    html <l-form name="goods" l-form-btn-class="l-form-btn-class" bind:linsubmit= ...

  4. ElasticSearch安装 --- windows版

    文件下载地址: 链接:https://pan.baidu.com/s/1_Cy_Sy1-vOvsUxliM-EZHQ 提取码:qpcv 定义: Elasticsearch 是一个分布式的搜索和分析引擎 ...

  5. 2021-08-02(console、comfrim)

    1.console对象 1.输出信息: console.info()别名 console.log(); 2.复合类型表格展示 console.table(obj) || console.table(A ...

  6. CF1476D题解

    场上 \(O(n)\) 切掉的一道挺水的题. 首先向左走和向右走,一个很明显的结论是,如果向左走了一段距离又回到原点,那么方向是不会变的,所以只需要求出能够向左走的最远距离和向右走的最远距离,加起来即 ...

  7. VuePress 博客之 SEO 优化(二)重定向

    前言 在 <一篇带你用 VuePress + Github Pages 搭建博客>中,我们使用 VuePress 搭建了一个博客,最终的效果查看:TypeScript 中文文档. 本篇讲讲 ...

  8. Spring MVC 实验3 springMVC框架基础

    实验三:spring mvc框架基础 实验目的: (1)理解spring mvc框架的运行流程 . (2)掌握springmvc框架的配置 实验要求: 请根据课程内容,  修改项目中的任意一用例,将控 ...

  9. 【文件系统】dumpe2fs命令

    dumpe2fs - dump ext2/ext3/ext4 filesystem information dumpe2fs prints the super block and blocks gro ...

  10. 问鼎杯预赛web writeup

    1. php的一个精度问题,具体什么精度自己查. 2017.000000000001=2017 2016.999999999999=2017 直接拿谷歌浏览器访问那个链接就可以拿到flag 2. 访问 ...