内容:

某物资管理系统中物资采购需要分级审批,主任可以审批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. JAVA——选择,循环,顺序控制结构

    目录 一.顺序控制 二.选择控制 2.1分支控制 2.1.1单分支 2.1.2双分支 2.1.3分支控制if-else 2.1.4嵌套分支 2.2switch分支结构 细节讨论 练习 题目1 题目2 ...

  2. php 23种设计模型 - 门面模式(外观模式)

    外观模式(Facade) 外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系 ...

  3. 变量、变量作用域、常量final、变量的命名规范

    变量 变量是什么:就是可以变化的量! Java是一种强类型语言,每个变量都必须声明其类型. Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域. 注意事项: 每个变量都有类型,类 ...

  4. oneAPI DPC++学习资料和实验平台

    DPC++ 一种新的异构平台,弥补了OPENCL 编写复杂的难题.基于SYCL 抽象层.基于SYCL 有多种实现,其中DPC++是相对成熟的方案. 书籍 由Intel工程师撰写的免费电子图书 Data ...

  5. map, reduce和filter(函数式编程)

    # map可以用于对可遍历结构的每个元素执行同样的操作,批量操作: map(lambda x: x**2, [1, 2, 3, 4]) # [1, 4, 9, 16] map(lambda x, y: ...

  6. Fiddler抓包常用功能

    通过上一篇文章Fiddler移动端抓包,我们知道了Fiddler抓包原理以及怎样进行移动端抓包,接下来介绍Fiddler中常用的功能. Fiddler中常用的功能如下: 停止抓包 清空会话窗内容 过滤 ...

  7. RGB、YUV、HSV和HSL区别和关联

    RGB.YUV.HSV和HSL区别和关联 近期在做的一个需求和颜色转换有关系,所以本篇将开发过程中比较常见的 四种颜色 进行一番梳理. 一.RGB颜色空间 从我们最常见的RGB颜色出发,RGB分别对应 ...

  8. 1354:括弧匹配检验ybt

    [题目描述]假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,如([ ]())或[([ ][ ])]等为正确的匹配,[( ])或([ ]( )或 ( ( ) ) )均为错误的匹配. 现在 ...

  9. RabbitMQ在开发环境搭建-转载

    1.安装erlang. rabbitmq 安装需要erlang 的支持,所有安装rabbitmq 之前需要现安装erlang.下载 erlang: https://www.erlang.org/dow ...

  10. CLion入门教程

    1. 说点什么 以下我将介绍地表最强(可能是之一,别打我) C/C++ 开发 IDE--CLion,以及如何使用它来快乐刷题. 工欲善其事,必先利其器.一个好的编程工具对写代码或是做题来说格外重要,尤 ...