行为模式---责任链模式-示例代码

时间:2025-03-09 07:03:07
#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 处理函数处理对象