责任链模式,请求处理类包含指向父类(下家)的指针,在本单元无法处理时将请求传递给下家。
#include <iostream>
using namespace std;
class request
{
public:
request(int _need_speed)
{
need_seed = _need_speed;
}
public:
int need_seed;
};
class tool_viecal //请求处理单元基类,定义处理请求接口
{
public:
tool_viecal()
{
nest = NULL;
}
void setnest(tool_viecal* _nest)//下家
{
nest = _nest;
}
virtual void handle_request(request* request) = 0;
protected:
tool_viecal* nest;//下家
};
class onfoot :public tool_viecal
{
public:
onfoot(int max=10)
{
max_speed = max;
}
virtual void handle_request(request* request)//请求处理函数
{
if (max_speed > request->need_seed)
{
cout << "步行!\n";
}
else
{
if (nest != NULL)
nest->handle_request(request);
else
cout << "你需要一个时光机器!\n";
}
}
public:
int max_speed;
};
class bybike :public tool_viecal
{
public:
bybike(int max = 50)
{
max_speed = max;
}
virtual void handle_request(request* request)
{
if (max_speed > request->need_seed)
{
cout << "ofo!\n";
}
else
{
if (nest != NULL)
nest->handle_request(request);
else
cout << "你需要一个时光机器!\n";
}
}
public:
int max_speed;
};
class bybus :public tool_viecal
{
public:
bybus(int max = 100)
{
max_speed = max;
}
virtual void handle_request(request* request)
{
if (max_speed > request->need_seed)
{
cout << "bus!\n";
}
else
{
if (nest != NULL)
nest->handle_request(request);
else
cout << "你需要一个时光机器!\n";
}
}
public:
int max_speed;
};
void main()
{
request *req = new request(51);
tool_viecal* tool1 = new onfoot(15);
tool_viecal* tool2 = new bybike();
tool_viecal* tool3 = new bybus();
tool1->setnest(tool2);
tool2->setnest(tool3);
tool1->handle_request(req);
delete tool3;
delete tool2;
delete tool1;
delete req;
return;
}