模板方法示意图
模板方法模式的QT代码实现
#ifndef HANDLE_H
#define HANDLE_H
#include
#include
class Handle
{
protected:
Handle *m_successor;
public:
Handle();
virtual ~Handle()=0;
void setHandle(Handle *);
virtual void handleRequest(int request) = 0;
};
class SupervisorHandle:public Handle
{
private:
QString m_name;
public:
SupervisorHandle(QString name):m_name(name){}
~SupervisorHandle(){}
void handleRequest(int request) override
{
if (request > 0 && request <10)
qDebug() << m_name << QStringLiteral("处理请求: ")<< request << endl;
else {
m_successor->handleRequest(request);
}
}
};
class GroupLeaderhandle:public Handle
{
private:
QString m_name;
public:
GroupLeaderhandle(QString name):m_name(name){}
~GroupLeaderhandle(){}
void handleRequest(int request) override
{
if (request > 9 && request <20)
qDebug() << m_name << QStringLiteral("处理请求: ")<< request << endl;
else {
m_successor->handleRequest(request);
}
}
};
class Staffhandle:public Handle
{
private:
QString m_name;
public:
Staffhandle(QString name):m_name(name){}
~Staffhandle(){}
void handleRequest(int request) override
{
if (request > 19 && request <30)
qDebug() << m_name << QStringLiteral("处理请求: ")<< request << endl;
else
m_successor->handleRequest(request);
}
};
class Nonehandle:public Handle
{
private:
QString m_name;
public:
Nonehandle(QString name):m_name(name){}
~Nonehandle(){}
void handleRequest(int request) override
{
qDebug() <<request << "none "<< endl;
}
};
#endif // HANDLE_H
main.cpp
#include
#include “handle.h”
#include “handlelistopreate.h”
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// Chain of Responsibility
Handle * supervisor = new SupervisorHandle(QString("小米"));
Handle * groupLeader = new GroupLeaderhandle(QString("xiao"));
Handle * staff = new Staffhandle(QString("li"));
Handle *none = new Nonehandle("none");
supervisor->setHandle(groupLeader);
groupLeader->setHandle(staff);
staff->setHandle(none);
supervisor->handleRequest(123);
return a.exec();
}