欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > 责任链模式——C++实现

责任链模式——C++实现

2025/4/23 19:16:06 来源:https://blog.csdn.net/T_killer_/article/details/145577914  浏览:    关键词:责任链模式——C++实现

1. 责任链模式简介

责任链模式的定义:为了避免请求发送者和多个请求处理者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并沿着这条链传递请求,直到有对象处理它为止。

责任链模式是一种行为型模式。

 通俗的说,就是将能够处理请求的对象连成一条链,每当请求来临的时候,请求就会沿着这条链传递,直到有一个对象能够处理该请求,或者所有的处理对象都无法处理该请求。

从实现上来看,责任链就好像一条单链表一样。

把责任链上的对象连接好了之后,客户只需要将请求发送到责任链上即可,而无需直到请求处理细节以及请求是被哪个对象处理了。这样就实现了请求的发送者和请求的处理者之间的解耦了。

2. 责任链模式的主要角色

通常情况下,责任链包含三个主要角色:

  • 抽象处理者:定义处理请求的接口,它包含抽象处理方法以及设置后继处理者的方法。
  • 具体处理者:实现抽象处理者的处理方法,判断能否处理请求,如无法处理则传递给后继处理者。
  • 客户端:负责创建责任链,并向链头的处理者提交请求,它不关心请求的具体处理细节以及传递过程。

3. 小案例

举个例子,办公室设备损坏后需要报修,根据维修价格的不同,需要向不同的人报批。A可以处理100元以下的报修,B可以处理100到1000元的物品报修,大于1000维修费的由C来处理。

这就比较适合使用责任链来解决。下面是代码演示:

#include <iostream>using namespace std;class Handler
{
protected:Handler* nextHandler = nullptr;
public:void setNextHandler(Handler* next) { nextHandler = next; }virtual void handle(int price) = 0;
};class A: public Handler
{
public:void handle(int price)override{if (price <= 100){cout << "A handled the price: " << price << ", 批准!" << endl;}else if (nextHandler){nextHandler->handle(price);}else{cout << "Can't handle the price: " << price << endl;}}
};class B : public Handler
{
public:void handle(int price)override{if (price <= 1000 ){cout << "B handled the price: " << price << ", 批准!" << endl;}else if (nextHandler){nextHandler->handle(price);}else{cout << "Can't handle the price: " << price << endl;}}
};class C: public Handler
{
public:void handle(int price)override{cout << "C handled the price: " << price << ", 批准!" << endl;}
};int main()
{A* a = new A();B* b = new B();C* c = new C();a->setNextHandler(b);b->setNextHandler(c);a->handle(50);a->handle(200);a->handle(2000);
}

版权声明:

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

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

热搜词