#include <iostream>
using namespace std;
class IHandler
{
public:
IHandler ()
{
mNextHandler = nullptr;
}
~IHandler(){}
virtual void Exec()
{
if (nullptr == mNextHandler)
{
cout << "this is the end." << endl;
return;
}
mNextHandler->Exec();
}
void SetNextHandler(IHandler *pstHandler)
{
mNextHandler = pstHandler;
}
protected:
IHandler *mNextHandler;
};
class Finance: public IHandler
{
public:
Finance(){}
~Finance(){}
void Exec()
{
cout << "Finance is done." << endl;
IHandler::Exec();
}
};
class Manager: public IHandler
{
public:
Manager(){}
~Manager(){}
void Exec()
{
cout << "Manager is done." << endl;
IHandler::Exec();
}
};
class CEO: public IHandler
{
public:
CEO(){}
~CEO(){}
void Exec()
{
cout << "CEO is done." << endl;
IHandler::Exec();
}
};
int main()
{
cout << "Enter" << endl;
IHandler *pstManager = new Manager();
IHandler *pstFinance = new Finance();
IHandler *pstCEO = new CEO();
if (nullptr == pstManager || nullptr == pstFinance || nullptr == pstCEO)
{
cout << "new handler failed." << endl;
return -1;
}
pstManager->SetNextHandler(pstFinance);
pstFinance->SetNextHandler(pstCEO);
pstManager->Exec();
delete pstManager;
pstManager = nullptr;
delete pstFinance;
pstFinance = nullptr;
delete pstCEO;
pstCEO = nullptr;
cout << "Exit" << endl;
return 0;
}
执行结果
PS E:\workspace\sample\COR> g++ .\cor.cpp
PS E:\workspace\sample\COR> ./a
Enter
Manager is done.
Finance is done.
CEO is done.
this is the end.
Exit