责任链

*****************************
在csdn上看到一篇责任链的文章,用c++给他重写一遍自己也学习下。
*****************************

class Handler {
protected:
Handler *successor;
public:
void SetSuccessor(Handler *suc) {
successor = suc;
}
virtual void HandleRequest(int request) = 0;
};

class Concretehandler1 :public Handler {
public:
void HandleRequest(int request) {
if (request > 0 && request < 20) {
cout << "do 1" << endl;
} else if (successor != NULL) {
successor->HandleRequest(request);
}
}
};

class Concretehandler2 :public Handler {
public:
void HandleRequest(int request) {
if (request > 20) {
cout << "do 2" << endl;
} else if (successor != NULL) {
successor->HandleRequest(request);
}
}
};

int _tmain(int argc, _TCHAR* argv[])
{
Handler *h1 = new Concretehandler1;
Handler *h2 = new Concretehandler2;
Handler *h22 = new Concretehandler2;

h1->SetSuccessor(h2);
h2->SetSuccessor(h22);
h22->SetSuccessor(NULL);

int requests[] = {23,2,3};

for (int i = 0;i < 3;i++) {
h1->HandleRequest(requests[i]);
cout << "**********" << endl;
}
system("pause");
}

*****************************

write by fgd

posted @ 2012-03-27 16:34  wen_dao_  阅读(174)  评论(0编辑  收藏  举报