定义:
使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止
示例一:责任链模式(通用版)
1. 类图16-4
2. 代码清单
// ********** 3. 责任链模式(通用版),代码清单16-3:***************//
enum EType
{
EType1 = 1,
EType2 ,
EType3
};
class IRequest
{
public:
virtual EType getType() = 0;
virtual QString getRequest() = 0;
};
class Request:public IRequest
{
public:
Request(EType type, QString request)
{
this->m_type = type;
this->m_request = request;
}
virtual EType getType()
{
return this->m_type;
}
virtual QString getRequest()
{
return this->m_request;
}
private:
EType m_type;
QString m_request;
};
class Handler
{
public:
Handler(){}
Handler(EType type)
{
this->m_type = type;
}
void handleMessage(IRequest *request)
{
if (request->getType() == this->m_type)
{
this->response(request);
}
else
{
if (this->m_nextHandler != nullptr)
{
this->m_nextHandler->handleMessage(request);
}
else
{
qDebug() << "NO!";
}
}
}
void setNext(Handler *handler)
{
this->m_nextHandler = handler;
}
protected:
virtual void response(IRequest *request) = 0;
protected:
Handler *m_nextHandler;
EType m_type;
};
class ConcreteHandler1:public Handler
{
public:
ConcreteHandler1()
{
this->m_type = EType1;
}
protected:
virtual void response(IRequest *request)
{
qDebug() << "request:" << request->getRequest();
}
};
class ConcreteHandler2:public Handler
{
public:
ConcreteHandler2()
{
this->m_type = EType1;
}
protected:
virtual void response(IRequest *request)
{
qDebug() << "request:" << request->getRequest();
}
};
class ConcreteHandler3:public Handler
{
public:
ConcreteHandler3()
{
this->m_type = EType1;
}
protected:
virtual void response(IRequest *request)
{
qDebug() << "request:" << request->getRequest();
}
};
class Client
{
public:
Client()
{
QSt