Chain Of Responsibility模式

    1、作用

    假设存在一个请求以及多个对象。为了使多个对象都有机会处理这个请求,将这些对象连成一条链,并沿着该链传递这个请求,直到有一个对象处理请求为止。

    举一个例子。在《步步惊心》中,假如康熙皇帝在太和殿要召见马尔泰若曦,皇帝得先通知旁边的太监李德全,然后李德全高喊“传马尔泰若曦进谏”,接着站在太和殿外的太监依次高喊“传马尔泰若曦进谏”,直到有一个太监传到马尔泰若曦。在这里中,“召见马尔泰若曦”就是一个请求,而那些太监就是处理该请求的多个对象。请求一直传递直到有对象处理了该请求。

 

    2、结构图

   

    3、Code --C++

    以下代码采用链表形式实现责任者链模式。实现要点有:

    (1)处理者节点是基类,对请求的处理过程在各个派生类中实现。

    (2)将请求丢给处理者链表,由处理者链表负责传递。

 

    // 处理者节点基类

    class CHandlerNode

    {

        public:

            CHandlerNode(CHandlerNode *pNextCHandlerNode = NULL);

            virtual ~CHandlerNode();

        public:

            virtual void HandleRequest() = 0;

        public:

            CHandlerNode *m_pNextCHandlerNode;

    }

 

    // 处理者链类

    class CHandlerChain

    {

        public:

            CHandlerChain();

            ~CHandlerChain();

        public:

            AddHandlerNode(CHandlerNode *pCHandlerNode);

            DestroyHandlerNode();

            void Process(void *Request);

        public:

            CHandlerNode *m_pCHandlerNodeHead;

    }

 

    // 处理者A类

    class CHandlerRuquestA : public CHandlerNode

    {

        public:

            CHandlerRuquestA();

            virtual ~CHandlerRuquestA();

        public:

            virtual void HandleRequest();

    }

 

    // 处理者B类

    class CHandlerRuquestB : public CHandlerNode

    {

        public:

            CHandlerRuquestB();

            virtual ~CHandlerRuquestB();

        public:

            virtual void HandleRequest();

    }

 

    // Main

    void main()

    {

        CHandlerChain ObjCHandlerChain;

        ObjCHandlerChain.AddHandlerNode(::new CHandlerRuquestA());// 处理者A加入链表

        ObjCHandlerChain.AddHandlerNode(::new CHandlerRuquestB());// 处理者B加入链表

        ObjCHandlerChain.Process(void *Request);                  // 处理请求...

        ObjCHandlerChain.DestroyHandlerNode();

    }

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值