Chain of Responsibility 设计模式--职责链方法

6 篇文章 0 订阅

模板方法示意图

在这里插入图片描述

模板方法模式的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();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值