当前位置: 首页> 科技> IT业 > 【设计模式之责任链模式 -- C++】

【设计模式之责任链模式 -- C++】

时间:2025/7/10 1:15:09来源:https://blog.csdn.net/qq_44628330/article/details/139873479 浏览次数:0次

责任链模式 – 链式处理,一环接一环

责任链模式是一种行为设计模式,允许你将请求沿着处理者链进行发送,直到其中一个处理者对请求进行处理。它帮助构建一系列对象,请求从一端进入并从另一端出来,期间可能会有多个或没有对象处理这个请求。这种模式通常用于实现不同的命令处理、事件处理等场景。

组成
  1. 处理者(Handler)接口:定义了处理请求的接口,通常包含一个方法来接收或处理请求,以及一个设置链中下一个处理者的方法。
  2. 具体处理者(Concrete Handler):实现处理者接口,处理它所负责的请求,如果可处理则处理,否则将请求转发给链中的下一个处理者。
  3. 客户端(Client):向链的第一个处理者发送请求,并期望请求被链中的某个处理者处理。
优点
  1. 降低耦合度:它将请求的发送者和接收者解耦。请求发送者不需要知道谁是请求的具体处理者,同时处理者也不需要知道请求的全貌,只需关注自己负责的部分。
  2. 增强给定功能的灵活性:可以在运行时通过改变链内的成员或调整它们的顺序,来增加或修改处理逻辑。
  3. 增加新的请求处理类很方便:扩展新的请求处理类不会影响到其他的类,符合开闭原则。
使用场景
  1. 多个对象可以处理同一个请求,但具体由哪个对象处理则在运行时动态决定。例如,多级审批流程中,具体由哪一级审批人处理某个审批请求,取决于请求的具体内容和审批人的权限。
  2. 不明确指定接收者的情况。在不确定请求由哪个对象处理的情况下,可以使用责任链模式,将请求沿着链传递,直到有对象处理它为止。
  3. 可处理一个请求的对象集合应被动态指定。责任链模式允许动态添加或修改处理链,适用于处理逻辑需要在运行时根据条件改变的情况。
实现
  1. 处理者接口
class Handler {
protected:std::shared_ptr<Handler> nextHandler;
public:virtual ~Handler() = default;void setNext(std::shared_ptr<Handler> handler) {nextHandler = handler;}virtual void handleRequest(int request) {if (nextHandler != nullptr) {nextHandler->handleRequest(request);}}
};
  1. 具体处理者1
class ConcreteHandler1 : public Handler {
public:void handleRequest(int request) override {if (request == 1) {std::cout << "ConcreteHandler1 handled request " << request << std::endl;} else {Handler::handleRequest(request);}}
};
  1. 具体处理者2
class ConcreteHandler2 : public Handler {
public:void handleRequest(int request) override {if (request == 2) {std::cout << "ConcreteHandler2 handled request " << request << std::endl;} else {Handler::handleRequest(request);}}
};
  1. 测试
int main() {std::shared_ptr<Handler> handler1 = std::make_shared<ConcreteHandler1>();std::shared_ptr<Handler> handler2 = std::make_shared<ConcreteHandler2>();handler1->setNext(handler2);handler1->handleRequest(2); // 输出: ConcreteHandler2 handled request 2handler1->handleRequest(1); // 输出: ConcreteHandler1 handled request 1handler1->handleRequest(3); // 无输出,因为没有处理者处理请求3return 0;
}
  1. 结果
ConcreteHandler2 handled request 2
ConcreteHandler1 handled request 1
关键字:【设计模式之责任链模式 -- C++】

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: