天天看點

設計模式之——職責鍊模式

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

設計模式之——職責鍊模式

繼續閱讀