class Processor
{
public:
virtual ~Processor();
virtual void Request(double) = 0;
void SetSuccessor(Processor*);
protected:
Processor();
Processor* m_pProcessor;
};
//Processor.cpp
#include "stdafx.h"
#include "Processor.h"
Processor::Processor()
{
}
Processor::~Processor()
{
if(m_pProcessor != NULL)
{
delete m_pProcessor;
m_pProcessor = NULL;
}
}
//设置上级主管
void Processor::SetSuccessor(Processor* pProcessor)
{
m_pProcessor = pProcessor;
}
//Director.h
#include "Processor.h"
class Director : public Processor
{
public:
Director();
virtual ~Director();
void Request(double);
};
//Director.cpp
#include "stdafx.h"
#include "Director.h"
#include <iostream>
using namespace std;
Director::Director()
{
}
Director::~Director()
{
}
void Director::Request(double dAmount)
{
if(dAmount <= 10000)
{
cout << "主管审批了采购请求" << endl;
}
else
{
cout << "申请金额走出主管权限范围,需向总经理申请审批" << endl;
if(this->m_pProcessor != NULL)
{
m_pProcessor->Request(dAmount);
}
}
}
//Manager.h
#include "Processor.h"
class Manager : public Processor
{
public:
Manager();
virtual ~Manager();
void Request(double);
};
//Manager.cpp
#include "stdafx.h"
#include "Manager.h"
#include <iostream>
using namespace std;
Manager::Manager()
{
}
Manager::~Manager()
{
}
void Manager::Request(double dAmount)
{
if(dAmount <= 100000)
{
cout << "总经理审批了采购请求" << endl;
}
else
{
cout << "申请金额超出总经理权限范围,需向董事长申请审批" << endl;
if(this->m_pProcessor != NULL)
{
m_pProcessor->Request(dAmount);
}
}
}
//Chariman.h
#include "Processor.h"
class Chariman : public Processor
{
public:
Chariman();
virtual ~Chariman();
void Request(double);
};
//Chariman.cpp
#include "stdafx.h"
#include "Chariman.h"
#include <iostream>
using namespace std;
Chariman::Chariman()
{
}
Chariman::~Chariman()
{
}
void Chariman::Request(double dAmount)
{
cout << "董事长审批了采购请求" << endl;
}
//main.cpp
#include "stdafx.h"
#include "Processor.h"
#include "Director.h"
#include "Manager.h"
#include "Chariman.h"
int main(int argc, char* argv[])
{
Processor* pDirector = new Director;
Processor* pManager = new Manager;
Processor* pChariman = new Chariman;
pDirector->SetSuccessor(pManager);
pManager->SetSuccessor(pChariman);
pDirector->Request(10000000.00);
return 0;
}
C++责任链模式
最新推荐文章于 2024-06-28 15:50:48 发布