美文网首页
职责链模式C++

职责链模式C++

作者: 涵仔睡觉 | 来源:发表于2018-05-10 19:02 被阅读0次

    职责链模式,就是使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

    职责链模式结构图

    image

    职责链模式基本代码

    #include <iostream>
    using namespace std;
    
    // Handle类,处理请求的接口:
    class Handle {
    protected:
        Handle* successor;
    public:
        void SetSuccessor(Handle* s) {
            successor = s;
        }
        virtual void HandleRequest(int request) {
            successor->HandleRequest(request);
        }
    };
    
    // ConcreteHandler1 & ConcreteHandler2,具体处理类,处理其负责的请求,如果不能处理就将请求转发给它的后继者:
    class ConcreteHandler1 : public Handle {
    public:
        void HandleRequest(int request) {
            if (request == 1) cout << "HandleRequest1:" << request << endl;
            else if (successor != NULL) successor->HandleRequest(request);
        }
    };
    
    class ConcreteHandler2 : public Handle {
    public:
        void HandleRequest(int request) {
            if (request == 2) cout << "HandleRequest2:" << request << endl;
            else if (successor != NULL) successor->HandleRequest(request);
        }
    };
    
    // 客户端代码实现:
    int main() {
        int request1 = 1;
        int request2 = 2;
    
        Handle* h1 = new ConcreteHandler1();
        Handle* h2 = new ConcreteHandler2();
    
        h1->SetSuccessor(h2);   // 设置链
    h2->SetSuccessor(h1);
    
        h1->HandleRequest(request2);  // HandleRequest2:2
        h2->HandleRequest(request1);  // HandleRequest1:1
        delete h1;
        delete h2;
        return 0;
    }
    

    应用场景

    优点:

    1. 当客户提交一个请求时,请求时沿链传递直至有一个ConcreteHandler对象负责处理它。
    2. 接受者和发送者都没有对方的明确信息,且链中的对象自己也不知道链的结构,结果是职责链可简化对象的相互连接,它们仅需保持一个指向其后继者的引用,而不需要保持所有的候选接受者的引用,这就大大降低了耦合度。
    3. 在客户端设置链结构,增强了给对象指派职责的灵活性。

    相关文章

      网友评论

          本文标题:职责链模式C++

          本文链接:https://www.haomeiwen.com/subject/hhytdftx.html