标签:
感觉这个设计模式和组合模式一样是一种很巧妙的设计模式,在需要使用它的地方如果不使用这种设计模式代码会变的很复杂,但是这种设计模式的基本原理又是很简单的。
责任链模式:
通过使多个对象都有机会来处理请求的方式避免了请求的发送者和接收者之间的耦合。将接收者组织成链式的结构这样可以将请求沿着这条链进行传递,直到有接收者对它进行处理。
UML类图:
主要包括:
C++代码实现如下:
#include <iostream>
using namespace std;
class Handler
{
public:
void setSuccessor(Handler * h)
{
successor=h;
}
virtual void handleRequest(int request)=0;
protected:
Handler * successor;
};
class ConcreteHandler1:public Handler
{
public:
void handleRequest(int request)
{
if(request>=0&&request<=10)
cout<<"ConcreteHandler1 handle between 0 and 10"<<endl;
else
{
if(successor!=NULL)
successor->handleRequest(request);
}
}
};
class ConcreteHandler2:public Handler
{
public:
void handleRequest(int request)
{
if(request>10&&request<=20)
cout<<"ConcreteHandler2 handle between 10 and 20"<<endl;
else
{
if(successor!=NULL)
successor->handleRequest(request);
}
}
};
class ConcreteHandler3:public Handler
{
public:
void handleRequest(int request)
{
if(request>20)
cout<<"ConcreteHandler3 handle greater than 20 "<<endl;
}
};
int main()
{
cout<<"基本的责任链模式代码"<<endl;
Handler *h1=new ConcreteHandler1();
Handler *h2=new ConcreteHandler2();
Handler *h3=new ConcreteHandler3();
h1->setSuccessor(h2);
h2->setSuccessor(h3);
int requests[]={1,3,11,19,20,22};
for(int i=0;i<sizeof(requests)/sizeof(requests[0]);i++)
{
h1->handleRequest(requests[i]);
}
return 0;
}
执行输出:
版权声明:本文为博主原创文章,未经博主允许不得转载。
设计模式之二十:责任链模式(Chain of Responsibility)
标签:
原文地址:http://blog.csdn.net/u012501459/article/details/46662079