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

概念

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

适用场景

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

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

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

创建方式

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

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

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

类关系图

示例代码

cpp 复制代码
#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");
}
cpp 复制代码
#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;
};
cpp 复制代码
欢迎东哥来到设计模式的世界!
CompentRecipient 处理函数处理对象
CompentRecipient1 处理函数处理对象
CompentRecipient2 处理函数处理对象
相关推荐
Meteors.19 小时前
23种设计模式——责任链模式(Chain of Responsibility Pattern)
设计模式·责任链模式
笨手笨脚の1 天前
设计模式-责任链模式
设计模式·责任链模式·行为型设计模式
爱学习的小熊猫_3 天前
设计模式之责任链模式
设计模式·责任链模式
大飞pkz9 天前
【设计模式】责任链模式
开发语言·设计模式·c#·责任链模式
bkspiderx13 天前
C++设计模式之行为型模式:职责链模式(Chain of Responsibility)
c++·设计模式·责任链模式
无名客016 天前
常用设计模式中的工厂模式,责任链模式,策略模式和单例模式的简单说明
设计模式·责任链模式·策略模式
爱吃烤鸡翅的酸菜鱼17 天前
基于多设计模式的状态扭转设计:策略模式与责任链模式的实战应用
java·后端·设计模式·责任链模式·策略模式
青草地溪水旁17 天前
设计模式(C++)详解——职责链模式 (Chain of Responsibility)(2)
c++·设计模式·责任链模式
青草地溪水旁17 天前
设计模式(C++)详解——职责链模式 (Chain of Responsibility)(1)
c++·设计模式·责任链模式
phdsky17 天前
【设计模式】责任链模式
设计模式·责任链模式