1,职责链的本质:尝试多个解决方法,直到找到一个起作用的方法.
2,实例代码
2,实例代码
#include <iostream>
#include <vector>
using namespace std;
enum Answer{ NO,YES };
class Response
{
public:
virtual Answer canIHave()=0;
virtual ~Response() {}
};
class AskMum : public Response
{
public:
Answer canIHave()
{
cout<<"mum,can I have?"<<endl;
return NO;
}
};
class AskDad : public Response
{
public:
Answer canIHave()
{
cout<<"dad,can I have?"<<endl;
return NO;
}
};
class AskUncle : public Response
{
public:
Answer canIHave()
{
cout<<"uncle,can I have?"<<endl;
return YES;
}
};
class RunResponse : public Response
{
vector<Response*> chain;
public:
RunResponse()
{
chain.push_back(new AskMum);
chain.push_back(new AskDad);
chain.push_back(new AskUncle);
}
Answer canIHave()
{
vector<Response*>::iterator ite=chain.begin();
while(ite!=chain.end())
{
if((*ite++)->canIHave()==YES)
return YES;
}
cout<<"All NO."<<endl;
return NO;
}
//记得释放堆内存
~ RunResponse()
{
vector<Response*>::iterator ite=chain.begin();
while(ite!=chain.end())
{
delete *ite++;
}
}
};
int main()
{
RunResponse chain;
chain.canIHave();
return 0;
}