cpp: Builder Pattern

®Geovin Du Dream Park™ / 2023-05-03 / 原文

 

// Gold.h : 此文件包含 "Gold" 类。原型模式  Builder Pattern C++ 14
// Jewelry Builder Pattern    生成器模式 建造者模式、Builder
// 2023年5月1日 涂聚文 Geovin Du Visual Studio 2022 edit. 



#pragma once
#ifndef GOLD_H 
#define GOLD_H 



#include <iostream>
#include <sstream>
#include <vector>


using namespace std;




namespace DuJewelryBuilderPattern
{

	/// <summary>
	/// 
	/// </summary>
	class Gold
	{

	private:

	public:
		/// <summary>
		/// 做父类时析构函数应该为虚函数
		/// </summary>
		virtual ~Gold() {} 
		/*
		/// <summary>
		/// 参数:模型编号,形如“1253679201245”等,每些位的组合都有一些特别的含义,这里无需深究
		/// </summary>
		/// <param name="strmodelno"></param>
		void Assemble(string strmodelno) 
		{
			LoadOperationModel(strmodelno.substr(4, 3));  
			LoadIntellectualModel(strmodelno.substr(7, 3));   
			LoadResourceModel(strmodelno.substr(10, 3));
		}
		/// <summary>
		/// 运营管理 operation
		/// </summary>
		/// <param name="strno"></param>
		virtual void LoadOperationModel(string strno) = 0; //这里也可以写为空函数体,子类决定是否重新实现
		/// <summary>
		/// 智能技术 intellectual technology
		/// </summary>
		/// <param name="strno"></param>
		virtual void LoadIntellectualModel(string strno) = 0;
		/// <summary>
		/// 资源配置 (整合)resource allocation
		/// </summary>
		/// <param name="strno"></param>
		virtual void LoadResourceModel(string strno) = 0;*/
        
	};
}


#endif

// GoldCommerce.h : 此文件包含 "GoldCommerce" 类。原型模式  Builder Pattern C++ 14
// Jewelry Builder Pattern    生成器模式 建造者模式、Builder
// 2023年5月1日 涂聚文 Geovin Du Visual Studio 2022 edit. 



#pragma once
#ifndef GOLDCOMMERCE_H 
#define GOLDCOMMERCE_H 



#include <iostream>
#include <sstream>
#include <vector>

#include "Gold.h"

using namespace std;




namespace DuJewelryBuilderPattern
{

	/// <summary>
	/// 商贸商会
	/// </summary>
	class GoldCommerce :public Gold
	{
		/**/
	public:
		/// <summary>
		/// 运营管理 operation
		/// </summary>
		/// <param name="strno"></param>
		virtual void LoadOperationModel(string strno)
		{
			cout << "商贸商会载入运营管理,最佳运营模式,需要调用GoldCommerce类或其父类中其他诸多成员函数,逻辑代码略......" << endl;
		}

		/// <summary>
		/// 智能技术 intellectual technology
		/// </summary>
		/// <param name="strno"></param>
		virtual void LoadIntellectualModel(string strno)
		{
			cout << "商贸商会载入智能技术管理,需要调用GoldCommerce类或其父类中其他诸多成员函数,逻辑代码略......" << endl;
		}
		/// <summary>
		/// 资源配置 (整合)resource allocation
		/// </summary>
		/// <param name="strno"></param>
		virtual void LoadResourceModel(string strno)
		{
			cout << "商贸商会载入公司人力,资本,信息,技术,物流等资源的最佳配置(整合),需要调用GoldCommerce类或其父类中其他诸多成员函数,逻辑代码略......" << endl;
		}


	};

}
#endif

// GoldCorporation.h : 此文件包含 "GoldCorporation" 类。原型模式  Builder Pattern C++ 14
// Jewelry Builder Pattern    生成器模式 建造者模式、Builder
// 2023年5月1日 涂聚文 Geovin Du Visual Studio 2022 edit. 



#pragma once
#ifndef GOLDCORPORATION_H 
#define GOLDCORPORATION_H 



#include <iostream>
#include <sstream>
#include <vector>


#include "Gold.h"

using namespace std;




namespace DuJewelryBuilderPattern
{

	/// <summary>
	/// 黄金公司
	/// </summary>
	class GoldCorporation :public Gold
	{

		/*
	public:
			/// <summary>
			/// 运营管理 operation
			/// </summary>
			/// <param name="strno"></param>
			virtual void LoadOperationModel(string strno)
			{
				cout << "黄金公司载入运营管理,最佳运营模式,需要调用GoldCorporation类或其父类中其他诸多成员函数,逻辑代码略......" << endl;
			}

			/// <summary>
			/// 智能技术 intellectual technology
			/// </summary>
			/// <param name="strno"></param>
			virtual void LoadIntellectualModel(string strno)
			{
				cout << "黄金公司载入智能技术管理,需要调用GoldCorporation类或其父类中其他诸多成员函数,逻辑代码略......" << endl;
			}
			/// <summary>
			/// 资源配置 (整合)resource allocation
			/// </summary>
			/// <param name="strno"></param>
			virtual void LoadResourceModel(string strno)
			{
				cout << "黄金公司载入公司人力,资本,信息,技术,物流等资源的最佳配置(整合),需要调用GoldCorporation类或其父类中其他诸多成员函数,逻辑代码略......" << endl;
			}
			*/
	};
}

#endif

// GoldShop.h : 此文件包含 "GoldShop" 类。原型模式  Builder Pattern C++ 14
// Jewelry Builder Pattern    生成器模式 建造者模式、Builder
// 2023年5月1日 涂聚文 Geovin Du Visual Studio 2022 edit. 



#pragma once
#ifndef GOLDSHOP_H 
#define GOLDSHOP_H 



#include <iostream>
#include <sstream>
#include <vector>

#include "Gold.h"

using namespace std;




namespace DuJewelryBuilderPattern
{

	/// <summary>
	/// 连锁店舖
	/// </summary>
	class GoldShop :public Gold
	{
		/*
		public:
			/// <summary>
			/// 运营管理 operation
			/// </summary>
			/// <param name="strno"></param>
			virtual void LoadOperationModel(string strno)
			{
				cout << "连锁店舖载入运营管理,最佳运营模式,需要调用GoldShop类或其父类中其他诸多成员函数,逻辑代码略......" << endl;
			}

			/// <summary>
			/// 智能技术 intellectual technology
			/// </summary>
			/// <param name="strno"></param>
			virtual void LoadIntellectualModel(string strno)
			{
				cout << "连锁店舖载入智能技术管理,需要调用GoldShop类或其父类中其他诸多成员函数,逻辑代码略......" << endl;
			}
			/// <summary>
			/// 资源配置 (整合)resource allocation
			/// </summary>
			/// <param name="strno"></param>
			virtual void LoadResourceModel(string strno)
			{
				cout << "连锁店舖载入公司人力,资本,信息,技术,物流等资源的最佳配置(整合),需要调用GoldShop类或其父类中其他诸多成员函数,逻辑代码略......" << endl;
			}
			*/

	};

}

#endif

  

// GoldBuilder.h : 此文件包含 "GoldBuilder" 类。原型模式  Builder Pattern C++ 14
// Jewelry Builder Pattern    生成器模式 建造者模式、Builder
// 2023年5月1日 涂聚文 Geovin Du Visual Studio 2022 edit. 

#pragma once
#ifndef GOLDBUILDER_H 
#define GOLDBUILDER_H 



#include <iostream>
#include <sstream>
#include <vector>

#include "Gold.h"


using namespace std;




namespace DuJewelryBuilderPattern
{

	/// <summary>
	/// 构建器父类
	/// </summary>
	class GoldBuilder 
	{

	private:


	public:

		/// <summary>
		/// 
		/// </summary>
		/// <param name="strmodelno"></param>
		//void Assemble(string strmodelno) //参数:模型编号,形如“333333333333”等,每些位的组合都有一些特别的含义,这里无需深究
		//{
		//	LoadOperationModel(strmodelno.substr(4, 3));  
		//	LoadIntellectualModel(strmodelno.substr(7, 3));   
		//	LoadResourceModel(strmodelno.substr(10, 3)); 
		//}
		//返回指向Gold类的成员变量指针m_pGold,当一个复杂的对象构建完成后,可以通过该成员函数把对象返回
		
		/// <summary>
		/// 返回指向Gold类的成员变量指针m_pGold,当一个复杂的对象构建完成后,可以通过该成员函数把对象返回
		/// </summary>
		/// <returns></returns>
		Gold* GetResult()
		{
			return m_pGold;
		}
		/// <summary>
		/// 运营管理 operation
		/// </summary>
		/// <param name="strno"></param>
		virtual void LoadOperationModel(string strno) = 0;//这里也可以写为空函数体,子类决定是否重新实现
		/// <summary>
		/// 智能技术 intellectual technology
		/// </summary>
		/// <param name="strno"></param>
		virtual void LoadIntellectualModel(string strno) = 0;
		/// <summary>
		/// 资源配置 (整合)resource allocation
		/// </summary>
		/// <param name="strno"></param>
		virtual void LoadResourceModel(string strno) = 0;
		/// <summary>
		/// 做父类时析构函数应该为虚函数
		/// </summary>		
		virtual ~GoldBuilder() {}



	protected:
		Gold* m_pGold;  //指向Gold类的成员变量指针


	};

}

#endif

// GoldBuilder.h : 此文件包含 "GoldBuilder" 类。原型模式  Builder Pattern C++ 14
// Jewelry Builder Pattern    生成器模式 建造者模式、Builder
// 2023年5月1日 涂聚文 Geovin Du Visual Studio 2022 edit. 



#pragma once
#ifndef GOLDCOMMERCEBUILDER_H 
#define GOLDCOMMERCEBUILDER_H 



#include <iostream>
#include <sstream>
#include <vector>

#include "Gold.h"
#include "GoldBuilder.h"
#include "GoldCommerce.h"

using namespace std;




namespace DuJewelryBuilderPattern
{

	/// <summary>
	/// 商贸商会构建器类
	/// </summary>
	class GoldCommerceBuilder :public GoldBuilder
	{



	public:


		GoldCommerceBuilder() //构造函数
		{
			m_pGold = new GoldCommerce();
		}

		/// <summary>
		/// 运营管理 operation
		/// </summary>
		/// <param name="strno"></param>
		virtual void LoadOperationModel(string strno)
		{
			cout << "商贸商会载入运营管理,最佳运营模式,需要调用GoldCommerce类或其父类中其他诸多成员函数,逻辑代码略......" << endl;
			//m_pGold->......略
		}

		/// <summary>
		/// 智能技术 intellectual technology
		/// </summary>
		/// <param name="strno"></param>
		virtual void LoadIntellectualModel(string strno)
		{
			cout << "商贸商会载入智能技术管理,需要调用GoldCommerce类或其父类中其他诸多成员函数,逻辑代码略......" << endl;
			//m_pGold->......略
		}
		/// <summary>
		/// 资源配置 (整合)resource allocation
		/// </summary>
		/// <param name="strno"></param>
		virtual void LoadResourceModel(string strno)
		{
			cout << "商贸商会载入公司人力,资本,信息,技术,物流等资源的最佳配置(整合),需要调用GoldCommerce类或其父类中其他诸多成员函数,逻辑代码略......" << endl;
			//m_pGold->......略
		}

	};

}


#endif

// GoldBuilder.h : 此文件包含 "GoldBuilder" 类。原型模式  Builder Pattern C++ 14
// Jewelry Builder Pattern    生成器模式 建造者模式、Builder
// 2023年5月1日 涂聚文 Geovin Du Visual Studio 2022 edit. 



#pragma once
#ifndef GOLDCORPORATIONBUILDER_H 
#define GOLDCORPORATIONBUILDER_H 



#include <iostream>
#include <sstream>
#include <vector>

#include "Gold.h"
#include "GoldCorporation.h"
#include "GoldBuilder.h"

using namespace std;




namespace DuJewelryBuilderPattern
{
	/// <summary>
	/// 黄金公司构建器类
	/// </summary>
	class GoldCorporationBuilder:public GoldBuilder
	{

	private:


	public:
		/// <summary>
		/// 构造函数
		/// </summary>
		GoldCorporationBuilder() //
		{
			m_pGold = new GoldCorporation();
		}

		/// <summary>
		/// 运营管理 operation
		/// </summary>
		/// <param name="strno"></param>
		virtual void LoadOperationModel(string strno)
		{
			cout << "黄金公司载入运营管理,最佳运营模式,需要调用GoldCorporation类或其父类中其他诸多成员函数,逻辑代码略......" << endl;
			//m_pGold->......略
		}

		/// <summary>
		/// 智能技术 intellectual technology
		/// </summary>
		/// <param name="strno"></param>
		virtual void LoadIntellectualModel(string strno)
		{
			cout << "黄金公司载入智能技术管理,需要调用GoldCorporation类或其父类中其他诸多成员函数,逻辑代码略......" << endl;
			//m_pGold->......略
		}
		/// <summary>
		/// 资源配置 (整合)resource allocation
		/// </summary>
		/// <param name="strno"></param>
		virtual void LoadResourceModel(string strno)
		{
			cout << "黄金公司载入公司人力,资本,信息,技术,物流等资源的最佳配置(整合),需要调用GoldCorporation类或其父类中其他诸多成员函数,逻辑代码略......" << endl;
			//m_pGold->......略
		}


	};

}

#endif

// GoldBuilder.h : 此文件包含 "GoldBuilder" 类。原型模式  Builder Pattern C++ 14
// Jewelry Builder Pattern    生成器模式 建造者模式、Builder
// 2023年5月1日 涂聚文 Geovin Du Visual Studio 2022 edit. 



#pragma once
#ifndef GOLDSHOPBUILDER_H 
#define GOLDSHOPBUILDER_H 



#include <iostream>
#include <sstream>
#include <vector>

#include "Gold.h"
#include "GoldBuilder.h"
#include "GoldShop.h"

using namespace std;




namespace DuJewelryBuilderPattern
{

	/// <summary>
	/// 连锁店舖构建器类
	/// </summary>
	class GoldShopBuilder :public GoldBuilder
	{
	public:

		/// <summary>
		/// 构造函数
		/// </summary>
		GoldShopBuilder() //
		{
			m_pGold = new GoldShop();
		}

		/// <summary>
		/// 运营管理 operation
		/// </summary>
		/// <param name="strno"></param>
		virtual void LoadOperationModel(string strno)
		{
			cout << "连锁店舖载入运营管理,最佳运营模式,需要调用GoldShop类或其父类中其他诸多成员函数,逻辑代码略......" << endl;
			//m_pGold->......略
		}

		/// <summary>
		/// 智能技术 intellectual technology
		/// </summary>
		/// <param name="strno"></param>
		virtual void LoadIntellectualModel(string strno)
		{
			cout << "连锁店舖载入智能技术管理,需要调用GoldShop类或其父类中其他诸多成员函数,逻辑代码略......" << endl;
			//m_pGold->......略
		}
		/// <summary>
		/// 资源配置 (整合)resource allocation
		/// </summary>
		/// <param name="strno"></param>
		virtual void LoadResourceModel(string strno)
		{
			cout << "连锁店舖载入公司人力,资本,信息,技术,物流等资源的最佳配置(整合),需要调用GoldShop类或其父类中其他诸多成员函数,逻辑代码略......" << endl;
			//m_pGold->......略
		}


	};

}

#endif

// GoldBuilder.h : 此文件包含 "GoldBuilder" 类。原型模式  Builder Pattern C++ 14
// Jewelry Builder Pattern    生成器模式 建造者模式、Builder
// 2023年5月1日 涂聚文 Geovin Du Visual Studio 2022 edit. 

#pragma once
#ifndef GOLDDIRECTOR_H 
#define GOLDDIRECTOR_H 



#include <iostream>
#include <sstream>
#include <vector>

#include "Gold.h"
#include "GoldBuilder.h"


using namespace std;




namespace DuJewelryBuilderPattern
{

	/// <summary>
	/// CEO 指挥者类
	/// </summary>
	class GoldDirector
	{

	public:

		/// <summary>
		/// 构造函数
		/// </summary>
		/// <param name="ptmpBuilder"></param>
		GoldDirector(GoldBuilder* ptmpBuilder) 
		{
			m_pGoldBuilder = ptmpBuilder;
		}

		/// <summary>
		/// 指定新的构建器
		/// </summary>
		/// <param name="ptmpBuilder"></param>
		void SetBuilder(GoldBuilder* ptmpBuilder)
		{  

			
			m_pGoldBuilder = ptmpBuilder;
		}

		/// <summary>
		/// 原GoldBuilder类中的Assemble成员函数
		/// </summary>
		/// <param name="strmodelno"></param>
		/// <returns></returns>
		Gold* Construct(string strmodelno) //参数:模型编号,形如“1253679201245”等,每些位的组合都有一些特别的含义,这里无需深究
		{
			m_pGoldBuilder->LoadOperationModel(strmodelno.substr(4, 3));  
			m_pGoldBuilder->LoadIntellectualModel(strmodelno.substr(7, 3));   
			m_pGoldBuilder->LoadResourceModel(strmodelno.substr(10, 3)); 
			return m_pGoldBuilder->GetResult();  //返回构建后的对象
		}
	private:

		GoldBuilder* m_pGoldBuilder; //指向所有构建器类的父类

	};

}


#endif

  

// GoldBuilder.h : 此文件包含 "GoldBuilder" 类。原型模式  Builder Pattern C++ 14
// Jewelry Builder Pattern    生成器模式 建造者模式、Builder
// 2023年5月1日 涂聚文 Geovin Du Visual Studio 2022 edit. 


#pragma once
#ifndef GEOVINDU_H 
#define GEOVINDU_H 

using namespace std;


namespace DuJewelryBuilderPattern
{

	/// <summary>
	/// 
	/// </summary>
	class GeovinDu
	{

	private:

	public:

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




	};

}


#endif

// GeovinDu.cpp : 此文件包含 "GeovinDu" 类。原型模式  Builder Pattern C++ 14
// Jewelry Builder Pattern    生成器模式 建造者模式、Builder
// 2023年5月1日 涂聚文 Geovin Du Visual Studio 2022 edit. 


#include "GeovinDu.h"
#include "Gold.h"
#include "GoldBuilder.h"
#include "GoldCorporation.h"
#include "GoldDirector.h"
#include "GoldShop.h"
#include "GoldCommerce.h"
#include "GoldCommerceBuilder.h"
#include "GoldCorporationBuilder.h"
#include "GoldShopBuilder.h"
#include "GoldDirector.h"



using namespace std;




namespace DuJewelryBuilderPattern
{


	/// <summary>
	/// 
	/// </summary>
	void GeovinDu::displayBuilder()
	{

		/*
		DuJewelryBuilderPattern::Gold* pmonster = new DuJewelryBuilderPattern::GoldCommerce(); //创建
		pmonster->Assemble("1253679201245");

		//释放资源
		delete pmonster;
	    */
		//DuJewelryBuilderPattern::GoldBuilder* pGoldBuilder = new GoldShopBuilder();

	
		GoldBuilder* pGoldBuilder =new DuJewelryBuilderPattern::GoldCorporationBuilder(); //创建构建器类对象
		DuJewelryBuilderPattern::GoldDirector* pDirector = new DuJewelryBuilderPattern::GoldDirector(pGoldBuilder);
		DuJewelryBuilderPattern::Gold* pGold = pDirector->Construct("33333333333333333");//这里就构造出了一个对象

		//释放资源
		delete pGold;
		delete pDirector;
		delete pGoldBuilder;
	
	}


}

  

调用:

// ConsoleDuBuilderPattern.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
// Jewelry Builder Pattern    生成器模式 建造者模式、Builder
// // 2023年5月1日 涂聚文 Geovin Du Visual Studio 2022 edit. 
//
#define _UNICODE


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

#ifdef _DEBUG   //只在Debug(调试)模式下
#ifndef DEBUG_NEW
#define DEBUG_NEW new(_NORMAL_BLOCK,__FILE__,__LINE__) //重新定义new运算符
#define new DEBUG_NEW
#endif
#endif

//#include <boost/type_index.hpp>
using namespace std;
//#pragma warning(disable : 4996) 
using namespace DuJewelryBuilderPattern;



int main()
{


    std::cout << "Hello World!!Programa Olá Mundo!涂聚文 Geovin Du\n";
    GeovinDu geovindu;
    geovindu.displayBuilder();

    system("pause");

    return 0;

}

// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单

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

  

输出:

Hello World!!Programa Olá Mundo!涂聚文 Geovin Du
黄金公司载入运营管理,最佳运营模式,需要调用GoldCorporation类或其父类中其他诸多成员函数,逻辑代码略......
黄金公司载入智能技术管理,需要调用GoldCorporation类或其父类中其他诸多成员函数,逻辑代码略......
黄金公司载入公司人力,资本,信息,技术,物流等资源的最佳配置(整合),需要调用GoldCorporation类或其父类中其他诸多成员函 数,逻辑代码略......
请按任意键继续. . .