#include <iostream>
using namespace std;
class handle
{
public:
handle():_suc(NULL){}
virtual ~handle(){}
void set_successor(handle *suc)
{
_suc = suc;
}
handle *get_successor()
{
return _suc;
}
virtual void handle_request(int i){}
protected:
handle *_suc;
};
class concrete_handleA : public handle
{
public:
void handle_request(int i)
{
if (i >=0 && i < 10)
cout << "concrete_handleA::handle_request() : num = "<<i<<endl;
else if (_suc != NULL)
_suc->handle_request(i);
}
};
class concrete_handleB : public handle
{
public:
void handle_request(int i)
{
if (i >= 10 && i < 20)
cout << "concrete_handleB::handle_request() : num = "<<i<<endl;
else if (_suc != NULL)
_suc->handle_request(i);
}
};
class concrete_handleC : public handle
{
public:
void handle_request(int i)
{
if (i >= 20 && i < 30)
cout << "concrete_handleC::handle_request() : num = "<<i<<endl;
else if (_suc != NULL)
_suc->handle_request(i);
}
};
int main()
{
handle *a = new concrete_handleA;
handle *b = new concrete_handleB;
handle *c = new concrete_handleC;
a->set_successor(b);
b->set_successor(c);
int arr[] = {12,50,6,4,23,15,8,20,14};
for (int i = 0; i < sizeof(arr)/sizeof(int); ++i)
a->handle_request(arr[i]);
delete a;delete b;delete c;
return 0;
}
chain_of_responsibility责任链模式
最新推荐文章于 2023-04-16 14:10:18 发布