cpp: Builder Pattern
// 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类或其父类中其他诸多成员函 数,逻辑代码略...... 请按任意键继续. . .
哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)