设计模式:责任链

设计模式:责任链

试想这样一个场景:小菜有一天想和经理说加薪的事情,经理说:“这件事我处理不了,需要交给人力总监从处理”。结果这个事情人力总监也处理不了,需要交给总经理处理。这样一个链式处理的过程就可以用责任链模式,当遇到自己不能处理的事情,就交给下一个尝试进行处理。

结构图

在这里插入图片描述
首先需要一个处理问题的接口,这个接口需要能够指定自己的下一个处理者式谁。ConcreteHandler1就是实例化的经理,可以设置他的下一个处理人是总监。这样当经理遇到自己不能处理的事情的时候,就可以抛给总监处理了。


一些思考
责任链模式类似与链表,每一个对象都需要指导下一级的对象是谁。这样在田间和删除相关环节是非常方便的。

代码

处理基类 (Handler)

class BaseHandler {
private:
    BaseHandler* m_nextHandler;
public:
    BaseHandler* setNext(BaseHandler* basehandler) {
        m_nextHandler = basehandler;
        return m_nextHandler;
    }
    virtual std::string handle(std::string request) {
        if (m_nextHandler != nullptr) {//如果还有上级,就抛給上级解决
            return m_nextHandler->handle(request);
        }
        else {
            return "";
        }
    }
};

老板们 (concreteHandler)

class Boss1 :public BaseHandler {
public:
    std::string handle(std::string request) override {
        if (request=="人事调动") {
            return "Boss1" + request + "----\n";
        }
        else {
            return BaseHandler::handle(request);
        }
    }
};
class Boss2 :public BaseHandler {
public:
    std::string handle(std::string request) override {
        if (request == "涨薪") {
            return "Boss2" + request + "----\n";
        }
        else {
            return BaseHandler::handle(request);
        }
    }
};

主函数

void clientCode(BaseHandler* handler) {
    std::list<std::string> problems = { "人事调动","涨薪","扯淡"};
    for (const std::string& problem : problems) {
        std::string result = handler->handle(problem);
        if (result.empty()) {
            std::cout << "处理结果:" << "无人处理\n";
        }
        else {
            std::cout << "处理结果:" << result;
        }
    }
}
int main()
{
    Boss1 boss1;
    Boss2 boss2;
    boss1.setNext(&boss2);
    clientCode(&boss1);
    clientCode(&boss2);
}

结果

在这里插入图片描述


总结

今天解决了小菜涨薪的问题,真是开心的一天啊。现在本菜做午饭了。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值