cpp: Chain Of Responsibility Pattern

 

/*****************************************************************//**
 * \file   PayrollProcessing.h
 * \brief  责任链模式Chain Of Responsibility Pattern  亦称: 职责链模式、命令链、CoR、Chain of Command、Chain of Responsibility C++ 14 行为模式
 * 2023年6月6日 涂聚文 Geovin Du Visual Studio 2022 edit.文章来源《C++新经典设计模式》 王健伟编著 清华大学出版社 
 * \author geovindu
 * \date   June 2023
 *********************************************************************/
#pragma once
#ifndef PAYROLLPROCESSING_H 
#define PAYROLLPROCESSING_H 

#include<cstring>
#include<stdbool.h>
#include<stdlib.h>
#include<iostream>
#include<malloc.h>
#include<cmath>
#include <iostream>
#include <sstream>
#include <vector>
#include <algorithm>
#include <array>
#include <functional>
#include <list>
#include <string>
#include <string.h>
#include <vector>
#include <map>


using namespace std;



namespace DuJewelryChainOfResponsibilityPattern
{

	/// <summary>
	/// 薪水处理类
	/// </summary>
	class PayrollProcessing
	{
	public:
		/// <summary>
		/// 处理加薪请求
		/// </summary>
		/// <param name="sname">员工姓名</param>
		/// <param name="salfigure">加薪多少</param>
		void raiseSalaryRequest(const string& sname, int salfigure) //参数1代表要加薪的员工名字,参数2代表求要加薪多少
		{
			if (salfigure <= 1000)
			{
				//加薪要求不超过1000,部门经理可以批准
				depmentManagerApprove(sname, salfigure);
			}
			else if (salfigure <= 5000)
			{
				//加薪要求在1000元之上但不超过5000,技术总监才能批准
				CTOApprove(sname, salfigure);
			}
			else
			{
				//加薪要求超过5000元,总经理才能批准
				generalManagerApprove(sname, salfigure);
			}
		}
	private:
		/// <summary>
		/// 部门经理审批加薪请求
		/// </summary>
		/// <param name="sname">员工姓名</param>
		/// <param name="salfigure">加薪多少</param>
		void depmentManagerApprove(const string& sname, int salfigure)
		{
			cout << sname << "的加薪要求为:" << salfigure << "元,部门经理审批通过!" << endl;
		}

		/// <summary>
		/// 技术总监审批加薪请求
		/// </summary>
		/// <param name="sname">员工姓名</param>
		/// <param name="salfigure">加薪多少</param>
		void CTOApprove(const string& sname, int salfigure)
		{
			cout << sname << "的加薪要求为:" << salfigure << "元,技术总监审批通过!" << endl;
		}

		/// <summary>
		/// 总经理审批加薪请求
		/// </summary>
		/// <param name="sname">员工姓名</param>
		/// <param name="salfigure">加薪多少</param>
		void generalManagerApprove(const string& sname, int salfigure)
		{
			cout << sname << "的加薪要求为:" << salfigure << "元,总经理审批通过!" << endl;
		}

	};

}
#endif


/*****************************************************************//**
 * \file   ParentSalaryApprover.h
 * \brief  责任链模式Chain Of Responsibility Pattern  亦称: 职责链模式、命令链、CoR、Chain of Command、Chain of Responsibility C++ 14 行为模式
 * 2023年6月7日 涂聚文 Geovin Du Visual Studio 2022 edit.
 * \author geovindu
 * \date   June 2023
 *********************************************************************/
#pragma once

#ifndef PARENTSALARYAPPROVER_H 
#define PARENTSALARYAPPROVER_H 

#include<cstring>
#include<stdbool.h>
#include<stdlib.h>
#include<iostream>
#include<malloc.h>
#include<cmath>
#include <iostream>
#include <sstream>
#include <vector>
#include <algorithm>
#include <array>
#include <functional>
#include <list>
#include <string>
#include <string.h>
#include <vector>
#include <map>

#include "RaiseSalaryRequest.h"

using namespace std;



namespace DuChainOfResponsibilityPattern
{

	/// <summary>
	/// 薪水审批者父类
	/// </summary>
	class ParentSalaryApprover
	{
	public:

		/// <summary>
		/// 
		/// </summary>
		ParentSalaryApprover() :nextChain(nullptr) {}

		/// <summary>
		/// 做父类时析构函数应该为虚函数
		/// </summary>
		virtual ~ParentSalaryApprover() {} 

		/// <summary>
		/// 设置指向的职责链中的下个审批者
		/// </summary>
		/// <param name="next"></param>
		void setNextChain(ParentSalaryApprover* next)
		{
			nextChain = next;
		}

		/// <summary>
		/// 处理加薪请求
		/// </summary>
		/// <param name="req"></param>
		virtual void processRequest(const RaiseSalaryRequest& req) = 0;

	protected:
		/// <summary>
		/// 找链中的下个对象并把请求投递给下个链中的对象
		/// </summary>
		/// <param name="req"></param>
		void sendRequestToNextHandler(const RaiseSalaryRequest& req)
		{
			//找链中的下个对象
			if (nextChain != nullptr)
			{
				//把请求投递给链中的下个对象
				nextChain->processRequest(req);
			}
			else
			{
				//没找到链中的下个对象,程序流程执行这里似乎不应该
				cout << req.getName() << "的加薪要求为:" << req.getSalFigure() << "元,但无人能够审批!" << endl;
			}
		}

	private:

		/// <summary>
		/// 
		/// </summary>
		ParentSalaryApprover* nextChain; //指向下一个审批者(对象)的多态指针(指向自身类型),每个都指向下一个,就会构成一个职责链(链表)


	};

}
#endif

/*****************************************************************//**
 * \file   GeneralManagerApprove.h
 * \brief  责任链模式Chain Of Responsibility Pattern  亦称: 职责链模式、命令链、CoR、Chain of Command、Chain of Responsibility C++ 14 行为模式
 * 2023年6月7日 涂聚文 Geovin Du Visual Studio 2022 edit.
 * \author geovindu
 * \date   June 2023
 *********************************************************************/
#pragma once
#ifndef GENERALMANAGERAPPROVER_H 
#define GENERALMANAGERAPPROVER_H 

#include<cstring>
#include<stdbool.h>
#include<stdlib.h>
#include<iostream>
#include<malloc.h>
#include<cmath>
#include <iostream>
#include <sstream>
#include <vector>
#include <algorithm>
#include <array>
#include <functional>
#include <list>
#include <string>
#include <string.h>
#include <vector>
#include <map>

#include "RaiseSalaryRequest.h"
#include "ParentSalaryApprover.h"

using namespace std;



namespace DuChainOfResponsibilityPattern
{

	/// <summary>
	/// 总经理子类
	/// </summary>
	class GeneralManagerApprove :public ParentSalaryApprover
	{


	public:
		/// <summary>
		/// 处理加薪请求
		/// </summary>
		/// <param name="req"></param>
		virtual void processRequest(const RaiseSalaryRequest& req)
		{
			int salfigure = req.getSalFigure();
			if (salfigure > 5000)
			{
				//如果自己能处理,则自己处理
				cout << req.getName() << "的加薪要求为:" << salfigure << "元,总经理审批通过!" << endl;
			}
			else
			{
				sendRequestToNextHandler(req);//自己不能处理,尝试找链中的下个对象来处理	
			}
		}


	};
}

#endif

/*****************************************************************//**
 * \file   CTOApprove.h
 * \brief  责任链模式Chain Of Responsibility Pattern  亦称: 职责链模式、命令链、CoR、Chain of Command、Chain of Responsibility C++ 14 行为模式
 * 2023年6月7日 涂聚文 Geovin Du Visual Studio 2022 edit.
 * \author geovindu
 * \date   June 2023
 *********************************************************************/
#pragma once
#ifndef CTOAPPROVER_H 
#define CTOAPPROVER_H 

#include<cstring>
#include<stdbool.h>
#include<stdlib.h>
#include<iostream>
#include<malloc.h>
#include<cmath>
#include <iostream>
#include <sstream>
#include <vector>
#include <algorithm>
#include <array>
#include <functional>
#include <list>
#include <string>
#include <string.h>
#include <vector>
#include <map>

#include "RaiseSalaryRequest.h"
#include "ParentSalaryApprover.h"

using namespace std;



namespace DuChainOfResponsibilityPattern
{

	/// <summary>
	/// 技术总监子类
	/// </summary>
	class CTOApprove :public ParentSalaryApprover
	{

	public:
		/// <summary>
		/// 处理加薪请求
		/// </summary>
		/// <param name="req"></param>
		virtual void processRequest(const RaiseSalaryRequest& req)
		{
			int salfigure = req.getSalFigure();
			if (salfigure > 1000 && salfigure <= 5000)
			{
				//如果自己能处理,则自己处理
				cout << req.getName() << "的加薪要求为:" << salfigure << "元,技术总监审批通过!" << endl;
			}
			else
			{
				sendRequestToNextHandler(req);//自己不能处理,尝试找链中的下个对象来处理	
			}
		}

	};

}

#endif

/*****************************************************************//**
 * \file   DepmentManagerApprove.h
 * \brief  责任链模式Chain Of Responsibility Pattern  亦称: 职责链模式、命令链、CoR、Chain of Command、Chain of Responsibility C++ 14 行为模式
 * 2023年6月7日 涂聚文 Geovin Du Visual Studio 2022 edit.
 * \author geovindu
 * \date   June 2023
 *********************************************************************/
#pragma once
#ifndef DEPMENTMANAGERAPPROVER_H 
#define DEPMENTMANAGERAPPROVER_H 

#include<cstring>
#include<stdbool.h>
#include<stdlib.h>
#include<iostream>
#include<malloc.h>
#include<cmath>
#include <iostream>
#include <sstream>
#include <vector>
#include <algorithm>
#include <array>
#include <functional>
#include <list>
#include <string>
#include <string.h>
#include <vector>
#include <map>

#include "RaiseSalaryRequest.h"
#include "ParentSalaryApprover.h"

using namespace std;



namespace DuChainOfResponsibilityPattern
{

	/// <summary>
	/// 部门经理子类
	/// </summary>
	class DepmentManagerApprove:public ParentSalaryApprover
	{


	public:
		/// <summary>
		/// 处理加薪请求
		/// </summary>
		/// <param name="req"></param>
		virtual void processRequest(const RaiseSalaryRequest& req)
		{
			int salfigure = req.getSalFigure();
			if (salfigure <= 1000)
			{
				//如果自己能处理,则自己处理
				cout << req.getName() << "的加薪要求为:" << salfigure << "元,部门经理审批通过!" << endl;
			}
			else
			{
				//自己不能处理,尝试找链中的下个对象来处理
				sendRequestToNextHandler(req);
			}
		}

	};

}

#endif
/*****************************************************************//**
 * \file   RaiseSalaryRequest.h
 * \brief  责任链模式Chain Of Responsibility Pattern  亦称: 职责链模式、命令链、CoR、Chain of Command、Chain of Responsibility C++ 14 行为模式
 * 2023年6月7日 涂聚文 Geovin Du Visual Studio 2022 edit.
 * \author geovindu
 * \date   June 2023
 *********************************************************************/
#pragma once
#ifndef RAISESALARYREQUEST_H 
#define RAISESALARYREQUEST_H 

#include<cstring>
#include<stdbool.h>
#include<stdlib.h>
#include<iostream>
#include<malloc.h>
#include<cmath>
#include <iostream>
#include <sstream>
#include <vector>
#include <algorithm>
#include <array>
#include <functional>
#include <list>
#include <string>
#include <string.h>
#include <vector>
#include <map>


using namespace std;



namespace DuChainOfResponsibilityPattern
{



	/// <summary>
	/// 加薪请求类
	/// </summary>
	class RaiseSalaryRequest
	{
	public:
		/// <summary>
		/// 构造函数
		/// </summary>
		/// <param name="sname"></param>
		/// <param name="salfigure"></param>
		RaiseSalaryRequest(const string& sname, int salfigure) :mName(sname), misalFigure(salfigure) {}

		/// <summary>
		/// 获取请求加薪的人员名字
		/// </summary>
		/// <returns></returns>
		const string& getName() const
		{
			return mName;
		}
		/// <summary>
		/// 获取请求加薪的数字
		/// </summary>
		/// <returns></returns>
		int getSalFigure() const
		{
			return misalFigure;
		}

	private:
		/// <summary>
		/// 请求加薪的人员名字
		/// </summary>
		string mName; 
		/// <summary>
		/// 请求加薪的数字
		/// </summary>
		int misalFigure;


	};

}

#endif


/*****************************************************************//**
 * \file   ParentWordFilter.h
 * \brief  责任链模式Chain Of Responsibility Pattern  亦称: 职责链模式、命令链、CoR、Chain of Command、Chain of Responsibility C++ 14 行为模式
 * 2023年6月7日 涂聚文 Geovin Du Visual Studio 2022 edit.
 * \author geovindu
 * \date   June 2023
 *********************************************************************/
#pragma once
#ifndef PARENTWORDFILTER_H 
#define PARENTWORDFILTER_H 

#include<cstring>
#include<stdbool.h>
#include<stdlib.h>
#include<iostream>
#include<malloc.h>
#include<cmath>
#include <iostream>
#include <sstream>
#include <vector>
#include <algorithm>
#include <array>
#include <functional>
#include <list>
#include <string>
#include <string.h>
#include <vector>
#include <map>



using namespace std;



namespace DuChainOfResponsibilityPattern
{

	/// <summary>
	/// 
	/// </summary>
	class ParentWordFilter
	{
	public:

		/// <summary>
		/// 
		/// </summary>
		ParentWordFilter() :nextChain(nullptr) {}

		/// <summary>
		/// 做父类时析构函数应该为虚函数
		/// </summary>
		virtual ~ParentWordFilter() {} 

		/// <summary>
		/// 设置指向的职责链中的下个过滤器
		/// </summary>
		/// <param name="next"></param>
		void setNextChain(ParentWordFilter* next)
		{
			nextChain = next;
		}

		/// <summary>
		/// 处理敏感词过滤请求
		/// </summary>
		/// <param name="strWord"></param>
		/// <returns></returns>
		virtual string processRequest(string strWord) = 0;

	protected:
		/// <summary>
		/// 找链中的下个对象并把请求投递给下个链中的对象
		/// </summary>
		/// <param name="strWord"></param>
		/// <returns></returns>
		string sendRequestToNextHandler(string strWord)
		{
			//找链中的下个对象
			if (nextChain != nullptr)
			{
				//把请求投递给链中的下个对象
				return nextChain->processRequest(strWord);
			}
			return strWord;
		}
	private:

		/// <summary>
		/// 
		/// </summary>
		ParentWordFilter* nextChain;


	};

}
#endif

/*****************************************************************//**
 * \file   SexyWordFilter.h
 * \brief  责任链模式Chain Of Responsibility Pattern  亦称: 职责链模式、命令链、CoR、Chain of Command、Chain of Responsibility C++ 14 行为模式
 * 2023年6月7日 涂聚文 Geovin Du Visual Studio 2022 edit.
 * \author geovindu
 * \date   June 2023
 *********************************************************************/
#pragma once
#ifndef SEXWORDFILTER_H 
#define SEXWORDFILTER_H 

#include<cstring>
#include<stdbool.h>
#include<stdlib.h>
#include<iostream>
#include<malloc.h>
#include<cmath>
#include <iostream>
#include <sstream>
#include <vector>
#include <algorithm>
#include <array>
#include <functional>
#include <list>
#include <string>
#include <string.h>
#include <vector>
#include <map>

#include "ParentWordFilter.h"

using namespace std;



namespace DuChainOfResponsibilityPattern
{

	/// <summary>
	/// 
	/// </summary>
	class SexyWordFilter:public ParentWordFilter
	{

	public:

		/// <summary>
		/// 
		/// </summary>
		/// <param name="strWord"></param>
		/// <returns></returns>
		virtual string processRequest(string strWord)
		{
			cout << "通过与词库比对,在strWord中查找\"性\"敏感词并用XXX来替换!" << endl;
			strWord += "XXX"; //测试代码,具体的实现逻辑略......
			return sendRequestToNextHandler(strWord);
		}

	};

}

#endif

/*****************************************************************//**
 * \file   DirtyWordFilter.h
 * \brief  责任链模式Chain Of Responsibility Pattern  亦称: 职责链模式、命令链、CoR、Chain of Command、Chain of Responsibility C++ 14 行为模式
 * 2023年6月7日 涂聚文 Geovin Du Visual Studio 2022 edit.
 * \author geovindu
 * \date   June 2023
 *********************************************************************/
#pragma once
#ifndef DIRTYWORDFILTER_H 
#define DIRTYWORDFILTER_H 

#include<cstring>
#include<stdbool.h>
#include<stdlib.h>
#include<iostream>
#include<malloc.h>
#include<cmath>
#include <iostream>
#include <sstream>
#include <vector>
#include <algorithm>
#include <array>
#include <functional>
#include <list>
#include <string>
#include <string.h>
#include <vector>
#include <map>

#include "ParentWordFilter.h"

using namespace std;



namespace DuChainOfResponsibilityPattern
{

	/// <summary>
	/// 脏话词过滤器子类
	/// </summary>
	class DirtyWordFilter :public ParentWordFilter
	{
	public:
		virtual string processRequest(string strWord)
		{
			cout << "通过与词库比对,在strWord中查找\"脏话\"敏感词并用YYY来替换!" << endl;
			strWord += "YYY";
			return sendRequestToNextHandler(strWord);
		}


	};

}
#endif

/*****************************************************************//**
 * \file   PoliticsWordFilter.h
 * \brief  责任链模式Chain Of Responsibility Pattern  亦称: 职责链模式、命令链、CoR、Chain of Command、Chain of Responsibility C++ 14 行为模式
 * 2023年6月7日 涂聚文 Geovin Du Visual Studio 2022 edit.
 * \author geovindu
 * \date   June 2023
 *********************************************************************/
#pragma once
#ifndef POLITICSWORDFILTER_H 
#define POLITICSWORDFILTER_H 

#include<cstring>
#include<stdbool.h>
#include<stdlib.h>
#include<iostream>
#include<malloc.h>
#include<cmath>
#include <iostream>
#include <sstream>
#include <vector>
#include <algorithm>
#include <array>
#include <functional>
#include <list>
#include <string>
#include <string.h>
#include <vector>
#include <map>

#include "ParentWordFilter.h"

using namespace std;



namespace DuChainOfResponsibilityPattern
{

	/// <summary>
	/// 政治敏感词过滤器子类
	/// </summary>
	class PoliticsWordFilter :public ParentWordFilter
	{
	public:
		virtual string processRequest(string strWord)
		{
			cout << "通过与词库比对,在strWord中查找\"政治\"敏感词并用ZZZ来替换!" << endl;
			strWord += "ZZZ";
			return sendRequestToNextHandler(strWord);
		}


	};

}
#endif

/*****************************************************************//**
 * \file   GeovinDu.h
 * \brief  责任链模式Chain Of Responsibility Pattern  亦称: 职责链模式、命令链、CoR、Chain of Command、Chain of Responsibility C++ 14 行为模式
 * 2023年6月6日 涂聚文 Geovin Du Visual Studio 2022 edit.文章来源《C++新经典设计模式》 王健伟编著 清华大学出版社 
 * \author geovindu
 * \date   June 2023
 *********************************************************************/
#pragma once
#ifndef GEOVINDU_H 
#define GEOVINDU_H 

#include<cstring>
#include<stdbool.h>
#include<stdlib.h>
#include<iostream>
#include<malloc.h>
#include<cmath>
#include <iostream>
#include <sstream>
#include <vector>
#include <algorithm>
#include <array>
#include <functional>
#include <list>
#include <string>
#include <string.h>
#include <vector>
#include <map>


#include "PayrollProcessing.h"

#include "RaiseSalaryRequest.h"
#include "ParentSalaryApprover.h"
#include "DepmentManagerApprove.h"
#include "CTOApprove.h"
#include "GeneralManagerApprove.h"

#include "ParentWordFilter.h"
#include "DirtyWordFilter.h"
#include "SexyWordFilter.h"
#include "PoliticsWordFilter.h"


using namespace std;



namespace DuJewelryChainOfResponsibilityPattern
{

	/// <summary>
	/// 
	/// </summary>
	class GeovinDu
	{
	private:

	public:

		/// <summary>
		/// 
		/// </summary>
		void displaySimple();

		/// <summary>
		/// 
		/// </summary>
		void displayDuSimple();
		/// <summary>
		/// 
		/// </summary>
		void displayWordSimple();

	};
}
#endif


/*****************************************************************//**
 * \file   GeovinDu.cpp
 * \brief  责任链模式Chain Of Responsibility Pattern  亦称: 职责链模式、命令链、CoR、Chain of Command、Chain of Responsibility C++ 14 行为模式
 * 2023年6月7日 涂聚文 Geovin Du Visual Studio 2022 edit.文章来源《C++新经典设计模式》 王健伟编著 清华大学出版社 
 * \author geovindu
 * \date   June 2023
 *********************************************************************/

#include "GeovinDu.h"



using namespace std;

using namespace DuChainOfResponsibilityPattern;


namespace DuJewelryChainOfResponsibilityPattern
{

	/// <summary>
	/// 
	/// </summary>
	void GeovinDu::displaySimple()
	{
		DuJewelryChainOfResponsibilityPattern::PayrollProcessing sh;
		sh.raiseSalaryRequest("张三", 15000); //张三要求加薪1.5万
		sh.raiseSalaryRequest("李四", 3500); //李四要求加薪3千5
		sh.raiseSalaryRequest("王二", 800);  //王二要求加薪8百
	}

	/// <summary>
	/// 
	/// </summary>
	void GeovinDu::displayDuSimple()
	{
		//(1)创建出职责链中包含的各个对象(部门经理、技术总监、总经理)
		DuChainOfResponsibilityPattern::ParentSalaryApprover* pzzlinkobj1 = new DuChainOfResponsibilityPattern::DepmentManagerApprove();
		DuChainOfResponsibilityPattern::ParentSalaryApprover* pzzlinkobj2 = new DuChainOfResponsibilityPattern::CTOApprove();
		DuChainOfResponsibilityPattern::ParentSalaryApprover* pzzlinkobj3 = new DuChainOfResponsibilityPattern::GeneralManagerApprove();
		//(2)将这些对象串在一起构成职责链(链表),现在职责链中pzzlinkobj1排在最前面,pzzlinkobj3排在最后面
		pzzlinkobj1->setNextChain(pzzlinkobj2);
		pzzlinkobj2->setNextChain(pzzlinkobj3);
		pzzlinkobj3->setNextChain(nullptr); //可以不写此行,因为ParSalApprover构造函数中设置了m_nextChain为nullptr

		//(3)创建几位员工关于加薪的请求(对象)
		DuChainOfResponsibilityPattern::RaiseSalaryRequest emp1Req("张三", 15000);//张三要求加薪1.5万
		DuChainOfResponsibilityPattern::RaiseSalaryRequest emp2Req("李四", 3500);//李四要求加薪3千5
		DuChainOfResponsibilityPattern::RaiseSalaryRequest emp3Req("王二", 800);//王二要求加薪8百
		//看看每位员工的加薪请求由职责链中的哪个对象(部门经理、技术总监、总经理)来处理,从职责链中排在最前面的接收者(pzzlinkobj1)开始
		pzzlinkobj1->processRequest(emp1Req);
		pzzlinkobj1->processRequest(emp2Req);
		pzzlinkobj1->processRequest(emp3Req);

		//(4)释放资源
		delete pzzlinkobj1;
		delete pzzlinkobj2;
		delete pzzlinkobj3;


	}
	/// <summary>
	/// 
	/// </summary>
	void GeovinDu::displayWordSimple()
	{
		//(1)创建出职责链中包含的各个对象(性敏感词过滤器、脏话词过滤器、政治敏感词过滤器)
		DuChainOfResponsibilityPattern::ParentWordFilter* pwflinkobj1 = new DuChainOfResponsibilityPattern::SexyWordFilter();
		DuChainOfResponsibilityPattern::ParentWordFilter* pwflinkobj2 = new DuChainOfResponsibilityPattern::DirtyWordFilter();
		DuChainOfResponsibilityPattern::ParentWordFilter* pwflinkobj3 = new DuChainOfResponsibilityPattern::PoliticsWordFilter();
		//(2)将这些对象串在一起构成职责链(链表),现在职责链中pwflinkobj1排在最前面,pwflinkobj3排在最后面
		pwflinkobj1->setNextChain(pwflinkobj2);
		pwflinkobj2->setNextChain(pwflinkobj3);
		pwflinkobj3->setNextChain(nullptr);
		string strWordFilterResult = pwflinkobj1->processRequest("你好,这里是过滤敏感词测试范例"); //从职责链中排在最前面的接收者(pwflinkobj1)开始,processRequest的参数代表的是聊天内容
		cout << "对敏感词过滤后的结果为:" << strWordFilterResult << endl;
		//(3)释放资源
		delete pwflinkobj1;
		delete pwflinkobj2;
		delete pwflinkobj3;

	}

}

  

调用:

/*****************************************************************//**
 * \file   ConsoleDuChainOfResponsibilityPattern.cpp
 * \brief  责任链模式Chain Of Responsibility Pattern  亦称: 职责链模式、命令链、CoR、Chain of Command、Chain of Responsibility C++ 14 行为模式
 * 2023年6月6日 涂聚文 Geovin Du Visual Studio 2022 edit.文章来源《C++新经典设计模式》 王健伟编著 清华大学出版社 
 * \author geovindu
 * \date   June 2023
 *********************************************************************/
// ConsoleDuChainOfResponsibilityPattern.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#define _UNICODE


#include <iostream>
#include "GeovinDu.h"


using namespace std;
using namespace DuChainOfResponsibilityPattern;
using namespace DuJewelryChainOfResponsibilityPattern;



int main()
{
    std::cout << "Hello World!涂聚文 Geovin Du\n";
    GeovinDu geovin;
    geovin.displaySimple();
    
    cout << "******************" << endl;

    geovin.displayDuSimple();

    cout << "*****" << endl;

    geovin.displayWordSimple();




    system("pause");
    return 0;
}

// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单
// 入门使用技巧: 
//   1. 使用解决方案资源管理器窗口添加/管理文件
//   2. 使用团队资源管理器窗口连接到源代码管理
//   3. 使用输出窗口查看生成输出和其他消息
//   4. 使用错误列表窗口查看错误
//   5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
//   6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件
#define UNICODE

  

输出

Hello World!涂聚文 Geovin Du
张三的加薪要求为:15000元,总经理审批通过!
李四的加薪要求为:3500元,技术总监审批通过!
王二的加薪要求为:800元,部门经理审批通过!
******************
张三的加薪要求为:15000元,总经理审批通过!
李四的加薪要求为:3500元,技术总监审批通过!
王二的加薪要求为:800元,部门经理审批通过!
*****
通过与词库比对,在strWord中查找"性"敏感词并用XXX来替换!
通过与词库比对,在strWord中查找"脏话"敏感词并用YYY来替换!
通过与词库比对,在strWord中查找"政治"敏感词并用ZZZ来替换!
对敏感词过滤后的结果为:你好,这里是过滤敏感词测试范例XXXYYYZZZ
请按任意键继续. . .

  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章