设计模式《十五》——责任链模式

简介

       责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。每个对象持有对下一个对象的引用,这样就会形成一条链,请求在这条链上传递,直到某一对象决定处理该请求。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。

角色与职责

Handler:处理请求的接口,接口中定义一个方法,以设定和返回对下一家的引用。

ConcreteHandler:具体处理者接到请求后,可以选择将请求处理掉,也可以将请求传给下家。

实现

#include <iostream>
using std::cout;
using std::endl;
using std::cin;
// 完成当前任务,需要把任务传递给下去
struct CarHandler {
public:
    virtual void HandlerCar() = 0;
    CarHandler* setNextHandler(CarHandler* handler) {
        m_handler = handler;
        return m_handler;
    }
protected:
    CarHandler* m_handler;
};
class HeadCarHandler : public CarHandler {
public:
    virtual void HandlerCar() {
        cout << "造车头" << endl;
        // 造完车头以后把任务传递给下一个执行者。
        if (m_handler != NULL) {
            m_handler->HandlerCar();
        }
    }
};
class BodyCarHandler : public CarHandler {
public:
    virtual void HandlerCar() {
        cout << "造车身" << endl;
        if (m_handler != NULL) {
            m_handler->HandlerCar();
        }
    }
};
class TailCarHandler : public CarHandler {
public:
    virtual void HandlerCar() {
        cout << "造车尾" << endl;
        if (m_handler != NULL) {
            m_handler->HandlerCar();
        }
    }
};
int main() {
    CarHandler* headHandle = new HeadCarHandler;
    CarHandler* bodyHandle = new BodyCarHandler;
    CarHandler* tailHandle = new TailCarHandler;
    // 业务顺序可以发生变化
    headHandle->setNextHandler(bodyHandle);
    bodyHandle->setNextHandler(tailHandle);
    tailHandle->setNextHandler(NULL);
    headHandle->HandlerCar();
    delete headHandle;
    delete bodyHandle;
    delete tailHandle;
    cin.get();
    return 0;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值