内容:

某物资管理系统中物资采购需要分级审批,主任可以审批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. 前端vue下载文件时blob返回流中怎么获取文件名

    我很久之前写了一篇前端vue利用blob对象下载文件,有些人私信我,如果后端返回流失败,给出的json对象该怎么获得?前端获取的流怎么能获取原文件名?其实在那篇文章之后,我就已经针对这两个问题进行了优 ...

  2. 微信小程序授权登录将open_id传至后台并入库

    要求能把用户昵称.头像以及open_id写入数据库,服务端保持用户登录状态 wxml: <block wx:else> <button type="primary" ...

  3. tp5 终端命令总结

    D:\PHP\phpstudy_pro\WWW\1906A\tp5>php think build --module examTest Successed D:\PHP\phpstudy_pro ...

  4. 使用 Fiddler 进行 iOS 抓包

    使用 Fiddler(下载) 进行 iOS 抓包,具体步骤如下: 安装并配置 Fidder 安装并打开 Fiddler, 点击 Tools -> Fiddler Options 选中 Decrp ...

  5. java入土---markdown使用技巧

    markdown使用技巧 标题 "#" 为一级标题 "##" 为2级标题 可一直往下曾增加,最多六级标题 字体 加粗 **加粗** 加粗 倾斜 *倾斜* 倾斜 ...

  6. 输入URL到页面加载过程

    URL(uniform resource location) : 统一资源定位符,用来作为互联网上各种资源的标识符,可理解为身份证号 . 注意点:浏览器为了保证安全性,设定了跨域保护策略, 即窗口之间 ...

  7. JavaScript面向对象—深入ES6的class

    JavaScript面向对象-深入ES6的class 前言 在前面一篇中主要介绍了JavaScript中使用构造函数+原型链实现继承,从实现的步骤来说还是比较繁琐的.在ES6中推出的class的关键字 ...

  8. Java的jmap命令使用详解

    jmap命令简介 jmap(Java Virtual Machine Memory Map)是JDK提供的一个可以生成Java虚拟机的堆转储快照dump文件的命令行工具.除此以外,jmap命令还可以查 ...

  9. MySQL CREATE TABLE 简单设计模板交流

      推荐用 MySQL 8.0 (2018/4/19 发布, 开发者说同比 5.7 快 2 倍) 或同类型以上版本. CREATE TABLE TEMPLATE CREATE TABLE [table ...

  10. 程序设计基础·Java学习笔记·面向对象(下)

    Java程序设计基础之面向对象(下) (补充了上的一些遗漏的知识,同时加入了自己的笔记的ヾ(•ω•`)o) (至于为什么分P,啊大概是为了自己查笔记方便(?)应该是("` 3′") ...