当前位置: 首页 > article >正文

行为模式---责任链模式

概念

责任链模式是一种行为设置模式,它的核心思想就是将请求的发送者和接收者进行解耦,每个接收者都可以处理请求。 在责任链模式中将每个接收者连成一个链条,当有请求发送上来的时候会经过每一个接收者。直到消息被处理。

适用场景

1、当程序中使用不同的方式处理各种不同的请求的时候,而请求的顺序是未知的,这个时候就可以使用责任链模式。

2、当请求必须按照一定的顺序进行处理的时候,就可以使用责任链模式。

3、如果所需要接收者及其顺序在运行时需要改变的时候,就需要使用到责任链模式。

创建方式

1、创建接收者接口,在接口中声明处理函数、一个自己对象的引用、一个设置下一个接收者的函数。

2、创建实际的接收者,实现继承接收者接口,在实际的处理函数中判断当前请求能否处理,如果如果无法处理,就想请求传递给下一个处理者。

3、在客户端使用的时候首先需要创建所有的实际处理者对象,并将所有的处理者对象通过设置的方式将其全部连接起来。传入需要处理的请求。

类关系图

在这里插入图片描述

示例代码

#include "ZeRenLianMoShi.h"

int main()
{
    std::cout << "欢迎东哥来到设计模式的世界!\n";
    RecipientBase* recipient = new CompentRecipient("处理1");
    RecipientBase* recipient1 = new CompentRecipient1("处理2");
    recipient1->setNextRecipient(recipient);
    RecipientBase* recipient2 = new CompentRecipient2("处理3");
    recipient2->setNextRecipient(recipient1);
    recipient2->handle("处理1");
    recipient2->handle("处理2");
    recipient2->handle("处理3");
}
#pragma once
#include <iostream>
#include <string>

using namespace std;

//接收者接口
class RecipientBase
{
public:
	RecipientBase() {}
	~RecipientBase() {}
	virtual void setNextRecipient(RecipientBase* rec) {}
	virtual void handle(string cmd) {}
	RecipientBase* m_rec = nullptr;
};

//具体接收者 CompentRecipient
class CompentRecipient : public RecipientBase {
public:
	CompentRecipient(string cmd) {
		m_cmd = cmd;
	};
	~CompentRecipient() {}
	void setNextRecipient(RecipientBase* rec) {
		m_rec = rec;
	}
	void handle(string cmd) {
		if (cmd == m_cmd) {
			cout << "CompentRecipient 处理函数处理对象" << endl;
		}
		else {
			if (m_rec) {
				m_rec->handle(cmd);
			}
		}
	}
private:
	string m_cmd;
};

//具体接收者 CompentRecipient1
class CompentRecipient1 : public RecipientBase {
public:
	CompentRecipient1(string cmd) {
		m_cmd = cmd;
	};
	~CompentRecipient1() {}
	void setNextRecipient(RecipientBase* rec) {
		m_rec = rec;
	}
	void handle(string cmd) {
		if (cmd == m_cmd) {
			cout << "CompentRecipient1 处理函数处理对象" << endl;
		}
		else {
			if (m_rec) {
				m_rec->handle(cmd);
			}
		}
	}
private:
	string m_cmd;
};

//具体接收者 CompentRecipient2
class CompentRecipient2 : public RecipientBase {
public:
	CompentRecipient2(string cmd) {
		m_cmd = cmd;
	};
	~CompentRecipient2() {}
	void setNextRecipient(RecipientBase* rec) {
		m_rec = rec;
	}
	void handle(string cmd) {
		if (cmd == m_cmd) {
			cout << "CompentRecipient2 处理函数处理对象" << endl;
		}
		else {
			m_rec->handle(cmd);
		}
	}
private:
	string m_cmd;
};

欢迎东哥来到设计模式的世界!
CompentRecipient 处理函数处理对象
CompentRecipient1 处理函数处理对象
CompentRecipient2 处理函数处理对象

http://www.kler.cn/a/577575.html

相关文章:

  • 气膜科技赋能冰雪产业,开启可持续发展新路径—轻空间
  • mybatis-plus+springboot3项目实现分页
  • RK Android14 应用打开蓝牙时去掉确认提示
  • GESP2024年6月认证C++三级( 第三部分编程题(2)寻找倍数)
  • 整理一下高级设施农业栽培学这门课程的所有知识点
  • Kafka的各个组件说明
  • 韩国互联网巨头 NAVER 如何借助 StarRocks 实现实时数据洞察
  • 基于Matlab的人脸识别的二维PCA
  • 基于 Qwen2.5-14B + Elasticsearch RAG 的大数据知识库智能问答系统
  • uniapp使用蓝牙,usb,局域网,打印机打印
  • 【音视频】ffmpeg命令提取音视频数据
  • AI 驱动的软件测试革命:从自动化到智能化的进阶之路
  • Node.js入门笔记2---下载安装Node.js
  • 专门为高速连续扫描设计的TDI工业相机
  • 项目实战--网页五子棋(对战功能)(9)
  • 面试基础---分布式事务深度解析:TCC、SAGA、2PC、XA 原理、实践与源码实现
  • 小程序 wxml 语法 —— 41列表渲染 - 进阶用法
  • 支持向量机的深度解析:从理论到C++实现
  • 77.ObservableCollection使用介绍1 C#例子 WPF例子
  • 虚幻基础:动画层接口