内容:

某物资管理系统中物资采购需要分级审批,主任可以审批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. ASP.NET Core 6框架揭秘实例演示[19]:数据加解密与哈希

    数据保护(Data Protection)框架旨在解决数据在传输与持久化存储过程中的一致性(Integrity)和机密性(confidentiality)问题,前者用于检验接收到的数据是否经过篡改,后 ...

  2. 1列表展示的SQL,改为:只查询出vip会员,展示在页面上(10分)

    模型代码: //会员 public static function member(){ return self::where('status',1)->select(); } 控制器代码: // ...

  3. LGP4216题解

    这是一种题解没有的 \(O(m\log n)\) 做法. 首先第一步转化.设这是第 \(x\) 个任务,若 \(opt\) 为 \(1\),危险值大于 \(c\) 的只有可能在第 \(x-c-1\) ...

  4. H3C三层交换机之IRF虚拟化技术详解及配置

    一.IRF是什么? 目前,网络中主要存在两种结构的通信设备,固定盒式设备和模块框式分布式设备. 固定盒式设备成本低廉,但没有高可用性支持:模块框式分布式设备具有高可用性.高性能.高端口密度的优点,但投 ...

  5. 1.SQL常用命令

    常用命令 连接命令 (1)conn[ect] 用法: conn 用户名/密码@网络服务名 [as sysdba/sysoper] 当用特权用户身份连接时,必须带上 as sysdba 或是 as sy ...

  6. 解决福大aTrust深信服无法访问部分页面的问题

    如果你原先使用过天融信,hosts里会留下 #################################################### Add by VONE SSL VPN Clien ...

  7. 74CMS 3.0 存储型XSS漏洞

    一. 启动环境 1.双击运行桌面phpstudy.exe软件 2.点击启动按钮,启动服务器环境 二.代码审计 1.双击启动桌面Seay源代码审计系统软件 2.因为74CMS3.0源代码编辑使用GBK编 ...

  8. 平衡树:为什么Redis内部实现用跳跃表

    摘要:Redis使用跳跃表(skiplist)作为有序集合(zset)的底层实现之一. 本文分享自华为云社区<5分钟了解Redis的内部实现跳跃表(skiplist)>,作者:万猫学社. ...

  9. 《前端运维》三、Docker--1镜像与容器

    一.基本概念 如果我们想要让软件运行起来,首先要保证操作系统的设置,其次还需要依赖各种组件和库的正确安装.那么虚拟机就是一种带环境安装的一种解决方案,它可以实现在一种操作系统里面运行另外一种操作系统, ...

  10. spring源码-扩展点

    /** * @Author quan * @Date 2020/11/13 * 扩展原理 * BeanPostProcessor bean后置处理器,bean创建对象初始化前后进行拦截工作 * * * ...