美文网首页我爱编程
行为模式6-职责链模式

行为模式6-职责链模式

作者: sunblog | 来源:发表于2018-04-16 23:01 被阅读0次

    行为模式6-职责链模式

    职责链模式 Chain Of Responsibility

    意图

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

    问题思考

    view的touch处理。从最上层view一层层传递到可以处理该touch事件的那一层,或者直到最下层。

    适用性

    • 有多个对象可以处理一个请求,按个对象处理该请求运行时刻自动确定。
    • 想在不明确指定接受者的情况下,向多个对象中的一个提交一个请求。

    效果

    • 降低耦合度 该模式是的一个对象无需知道是其他哪个个对象处理其请求。
    • 增强了给对象直白职责(Responsibility)的灵活性 可以在运行时刻对概念进行动态的增加或修改来增加或改变处理能力。
    • 不保证被接受 既然一个请求没有明确的接受者,那么久不能保证它一定会被处理。

    类图

    chainOfResponsibility

    实现

    class Handler {
    public:
        explicit Handler(Handler *successor) { mSuccessor = successor; }
    
        // non-virtual
        void Start(Request &request) {
            bool handledByThisNode = Handle(request);
            if (!handledByThisNode && !mSuccessor) {
                mSuccessor->Start(request);
            }
        }
    
        virtual bool Handle(Request &request) = 0;
    
        void SetSuccessor(Handler *successor) { mSuccessor = successor; }
    
        Handler *GetSuccessor() { return mSuccessor; }
    
    private:
        Handler *mSuccessor = nullptr;
    };
    
    
    class ConcreteHandler : public Handler {
    public:
        explicit ConcreteHandler(Handler *successor) : Handler(successor) {}
    
        bool Handle(Request &request) override {
            bool handledByThisNode = false;
            // some code
            return handledByThisNode;
        }
    };
    

    相关文章

      网友评论

        本文标题:行为模式6-职责链模式

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