handler.h
#ifndef HANDLER_H
#define HANDLER_H
#include <QtDebug>
#include <QString>
class Handler
{
public:
Handler() {}
void setSuccessor(Handler *successor)
{
m_sucessor = successor;
}
virtual void handleRequest(int request) = 0;
protected:
Handler *m_sucessor;
};
class ConcreteHandler1 : public Handler
{
public:
ConcreteHandler1() {}
void handleRequest(int request)
{
if(request >= 0 && request < 10)
{
qDebug() << "ConcreteHandler1 处理请求" << QString::number(request);
}
else
{
m_sucessor->handleRequest(request);
}
}
};
class ConcreteHandler2 : public Handler
{
public:
ConcreteHandler2() {}
void handleRequest(int request)
{
if(request >= 10 && request < 20)
{
qDebug() << "ConcreteHandler2 处理请求" << QString::number(request);
}
else
{
m_sucessor->handleRequest(request);
}
}
};
class ConcreteHandler3 : public Handler
{
public:
ConcreteHandler3() {}
void handleRequest(int request)
{
if(request >= 20)
{
qDebug() << "ConcreteHandler3 处理请求" << QString::number(request);
}
else
{
m_sucessor->handleRequest(request);
}
}
};
#endif // HANDLER_H
main.cpp
#include <QApplication>
#include "handler.h"
//职责链模式
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Handler *h1 = new ConcreteHandler1();
Handler *h2 = new ConcreteHandler2();
Handler *h3 = new ConcreteHandler3();
h1->setSuccessor(h2);
h2->setSuccessor(h3);
h1->handleRequest(3);
return a.exec();
}
UML