c++实现职责链模式--财务审批
内容:
某物资管理系统中物资采购需要分级审批,主任可以审批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++实现职责链模式--财务审批的更多相关文章
- [Python设计模式] 第24章 加薪审批——职责链模式
github地址:https://github.com/cheesezh/python_design_patterns 题目 用程序模拟以下情景 员工向经理发起加薪申请,经理无权决定,需要向总监汇报, ...
- 设计模式24---设计模式之职责链模式(Chain of Responsibility)(行为型)
1.职责链模式讲解 1.1职责链定义 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. 1.2职责链模式 ...
- C#设计模式之二十一职责链模式(Chain of Responsibility Pattern)【行为型】
一.引言 今天我们开始讲"行为型"设计模式的第八个模式,该模式是[职责链模式],英文名称是:Chain of Responsibility Pattern.让我们看看现实生活中 ...
- C#设计模式之二十职责链模式(Chain of Responsibility Pattern)【行为型】
一.引言 今天我们开始讲“行为型”设计模式的第八个模式,该模式是[职责链模式],英文名称是:Chain of Responsibility Pattern.让我们看看现实生活中的例子吧,理解起来可能更 ...
- Java设计模式之责任链模式、职责链模式
本文继续介绍23种设计模式系列之职责链模式. 什么是链 1.链是一系列节点的集合. 2..链的各节点可灵活拆分再重组. 职责链模式 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间 ...
- 行为型模式(八) 职责链模式(Chain of Responsibility)
一.动机(Motivate) 在软件构建过程中,一个请求可能被多个对象处理,但是每个请求在运行时只能有一个接受者,如果显示指定,将必不可少地带来请求发送者与接受者的紧耦合.如何使请求的发送者不需要指定 ...
- C#设计模式学习笔记:(20)职责链模式
本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/8109100.html,记录一下学习过程以备后续查用. 一.引言 今天我们要讲行为型设计模式的第八个模式--职 ...
- 深入浅出设计模式——职责链模式(Chain of Responsibility Pattern)
模式动机 职责链可以是一条直线.一个环或者一个树形结构,最常见的职责链是直线型,即沿着一条单向的链来传递请求.链上的每一个对象都是请求处理者,职责链模式可以将请求的处理者组织成一条链,并使请求沿着链传 ...
- C#设计模式——职责链模式(Chain Of Responsibility Pattern)
一.概述 在软件开发中,某一个对象的请求可能会被多个对象处理,但每次最多只有一个对象处理该请求,对这类问题如果显示指定请求的处理对象,那么势必会造成请求与处理的紧耦合,为了将请求与处理解耦,我们可以使 ...
随机推荐
- 非常详细的python和pycharm下载安装教程
目录 引言 为什么要学python 下载网址 python下载及安装 pycharm下载及安装 你人生中的第一句python 引言 Python诞生于1989年的一个圣诞节,其创作者Guido v ...
- 转发有关tomcat和nginx
nginx 与 tomcat 组合搭建web服务 部分内容转自 http://www.cnblogs.com/naaoveGIS/ 1. Web服务 nginx是常用的web服务器,用于获取静态资 ...
- Laravel-QueryList-采集
<?php namespace App\Http\Controllers; use App\Models\NewsModel; use Illuminate\Http\Request; use ...
- doctor学习(二) - contos7安装doctor
1.更新update到最新的版本 yum update 2.卸载老版本docker yum remove docker docker-common docker-selinux docker- ...
- Java入土--Java基础(二)
Java基础(二) 接上一讲,我们接着来聊聊Java的一些基础知识,下一讲就会进行流程的控制. 类型转换 首先呢,是类型的转换,接上一个内容的数据类型,类型转换就是数据类型更进一步的应用. 由于Jav ...
- win server 2012下安装IIS 8后配置ASP网站的注意事项
1,安装IIS时,如果你用不到asp.net 在web下的应用程序开发只需要勾选ASP这一项就可以. 2,IIS测试成功后,需要在你设定的主目录添加权限,找到你的主目录-属性-安全-编辑,添加Ever ...
- 解决vue单页面应用做微信JSSDK注入权限时出现“invalid signature”(ios端)
--都说微信开发多坑,没想到遇到一个天坑. 在做一个vue项目时,要用到微信JS-SDK,官方文档详见:https://developers.weixin.qq.com/doc/offiaccount ...
- CF587F&CF547E题解
这两道题好像啊 贡献一种使用SAM和ACAM草两道题的方法 下面假装有 \(O(\sum |S|=m)=O(n)\). 你看看,这CF换过多少个出题人啦?换汤不换药啦!其实这两道题是同一个人出的 CF ...
- python 之 matplotlib 练习
import numpy as npimport matplotlib.pyplot as plt x = np.linspace(0,10,1000)# 自变量y = np.sin(x) + 1 # ...
- windows服务器怎么将证书添加到受信任证书颁发机构
1.键盘输入win+r 快键键,出现运行,输入mmc. 2.打开控制台根节点,点击上方导航栏的文件-->添加删除管理单元.如下图. 3.在可用的管理单元中选择"证书",计算机 ...