责任链模式(Chain of Responsibility)

设计模式之责任链模式。
责任链模式的作用是:推卸责任。
“推卸责任”听起来有些贬义的意思,但是有时候也确实存在需要“推卸责任”的情况。例如,当外部请求程序进行某个处理,但程序暂时无法决定由那个对象负责处理时,就需要推卸责任。这种情况下,我们需要考虑:将多个对象组织成一条职责链,然后按照他们在职责链上的顺序一个一个地找出到底应该谁来负责处理。
示例代码如下:

#include<iostream>
using namespace  std;

//责任链模式

struct Teacher
{
    char        name;
    int         age;
    Teacher*    next;
};


//造完车以后需要把任务传递下去
class CarHandle
{
public:
    virtual void HandleCar()=0;

    void SetNextHandle(CarHandle* handle)
    {
        m_handle = handle;
    }
    virtual ~CarHandle(){}

protected:
    CarHandle* m_handle;//下一个处理单元
};

class CarHeadHandle:public CarHandle
{
public:
    virtual void HandleCar()
    {
        cout<<"造车头"<<endl;

        if(m_handle!=NULL)
        {//造完 车头 ,把任务交给下一个处理者。
            m_handle->HandleCar();
        }
    }
};

class CarBodyHandle:public CarHandle
{
public:
    virtual void HandleCar()
    {
        cout<<"造车身"<<endl;

        if(m_handle!=NULL)
        {//造完 车身 ,把任务交给下一个处理者。
            m_handle->HandleCar();
        }
    }
};

class CarTailHandle:public CarHandle
{
public:
    virtual void HandleCar()
    {
        cout<<"造车尾"<<endl;

        if(m_handle!=NULL)
        {//造完 车尾 ,把任务交给下一个处理者。
            m_handle->HandleCar();
        }
    }
};



int main()
{

    CarHandle*   pHeadHandle=new CarHeadHandle();
    CarHandle*   pBodyHandle=new CarBodyHandle();
    CarHandle*   pTailHandle=new CarTailHandle();

    pHeadHandle->SetNextHandle(pBodyHandle);
    pBodyHandle->SetNextHandle(pTailHandle);
    pTailHandle->SetNextHandle(NULL);

    pHeadHandle->HandleCar();

    delete  pBodyHandle;
    delete  pHeadHandle;
    delete  pTailHandle;

    return 0;
}

执行程序,运行结果如下图所示:
这里写图片描述
该模式在具体的程序库中使用的例子如下(后续补充):

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值