每日博客
职责链模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解职责链模式的动机,掌握该模式的结构;
2、能够利用职责链模式解决实际问题。
[实验任务一]:财务审批
某物资管理系统中物资采购需要分级审批,主任可以审批1万元及以下的采购单,部门经理可以审批5万元及以下的采购单,副总经理可以审批10万元及以下的采购单,总经理可以审批20万元及以下的采购单,20万元以上的采购单需要开职工大会确定。现用职责链模式设计该系统。
C++
#include <iostream>
#include <string>
using namespace std;
class Manager
{
protected:
Manager *m_manager;
public:
Manager(Manager* manager):m_manager(manager){}
virtual void DealWithRequest(int num) {}
};
class zManager : public Manager
{
public:
zManager(Manager* manager):Manager(manager){}
void DealWithRequest(int num)
{
if(num < 10000)
{
cout << "主任批准物资采购" << num << "元" <<endl<<endl;
}
else
{
cout << "主任无法处理,交由部门经理处理" <<endl;
m_manager->DealWithRequest(num);
}
}
};
class CommonManager : public Manager
{
public:
CommonManager(Manager* manager):Manager(manager){}
void DealWithRequest(int num)
{
if(num < 50000)
{
cout << "部门经理批准物资采购" << num << "元" <<endl<<endl;
}
else
{
cout << "部门经理无法处理,交由副总经理处理" <<endl;
m_manager->DealWithRequest(num);
}
}
};
class Majordomo:public Manager
{
public:
Majordomo(Manager* manager):Manager(manager){}
virtual void DealWithRequest(int num)
{
if(num < 100000)
{
cout << "副总经理批准物资采购" << num << "元" <<endl<<endl;
}
else
{
cout << "副总经理无法处理,交由总经理处理" <<endl;
m_manager->DealWithRequest(num);
}
}
};
class GeneralManager : public Manager
{
public:
GeneralManager(Manager *manager):Manager(manager){}
void DealWithRequest(int num)
{
if(num < 200000)
{
cout << "总经理批准物资采购" << num << "元" <<endl<<endl;
}
else
{
cout << "总经理无法处理,需要开职工大会确定" <<endl;
}
}
};
main()
{
Manager *general = new GeneralManager(NULL);
Manager *majordomo = new Majordomo(general);
Manager *common = new CommonManager(majordomo);
Manager *z = new zManager(common);
z->DealWithRequest(4000);
z->DealWithRequest(10000);
z->DealWithRequest(60000);
z->DealWithRequest(110000);
z->DealWithRequest(400000);
}