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
請按任意鍵繼續. . .

  

 

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