/*****************************************************************//** * \file Gold.h * \brief 橋接模式 Bridge Pattern C++ 14 * 2023年6月3日 塗聚文 Geovin Du Visual Studio 2022 edit. * \author geovindu * \date June 2023 *********************************************************************/ #pragma once #ifndef GOLD_H #define GOLD_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> using namespace std; namespace DuJewelryBridgePattern { /// <summary> /// 黃金 /// </summary> class Gold { public: /// <summary> /// 鑲㠌 /// </summary> /// <param name="pInlayName"></param> void metallurgy(const char* pInlayName) { int iLen = 100; //char du[100]=pInlayName; //char** ptr; //ptr = &pInlayName; char* pData = parseDesgin(pInlayName, iLen); if (iLen > 0) { //char* p; //*p = ' '; // *p= *pData; // << *p cout<<"["<< pInlayName << "]*" << "顯示pData所指向的緩衝區中的黃金數據。" << endl; //...... delete pData; //模擬代碼中因爲pData的內存是new出來的,這裏需要釋放該內存 } } /// <summary> /// /// </summary> virtual ~Gold() {} //做父類時析構函數應該爲虛函數 private: //根據文件名分析文件內容,每個子類因爲黃金冶煉不同,會有不同的讀取和處理代碼 Inlay /// <summary> /// 設計 /// </summary> /// <param name="pInlayName"></param> /// <param name="iLen"></param> /// <returns></returns> virtual char* parseDesgin(const char* pInlayName, int& iLen) = 0; }; } #endif /*****************************************************************//** * \file GoldGrace.h * \brief 橋接模式 Bridge Pattern C++ 14 * 2023年6月3日 塗聚文 Geovin Du Visual Studio 2022 edit. * \author geovindu * \date June 2023 *********************************************************************/ #pragma once #ifndef GOLDGRACE_H #define GOLDGRACE_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 "Gold.h" using namespace std; namespace DuJewelryBridgePattern { /// <summary> /// 優雅 /// </summary> class GoldGrace:public Gold { private: /// <summary> /// 設計 /// </summary> /// <param name="pInlayName"></param> /// <param name="iLen"></param> /// <returns></returns> virtual char* parseDesgin(const char* pInlayName, int& iLen) { cout << "Grace 優雅:韌性和延展性高,不受傳統黃金材質限制,可打造出優雅時尚的造型;"; iLen = 100; char* presult = new char[iLen]; return presult; } }; } #endif /*****************************************************************//** * \file GoldGlorious.h * \brief 橋接模式 Bridge Pattern C++ 14 * 2023年6月3日 塗聚文 Geovin Du Visual Studio 2022 edit. * \author geovindu * \date June 2023 *********************************************************************/ #pragma once #ifndef GOLDGLORIOUS_H #define GOLDGLORIOUS_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 "Gold.h" using namespace std; namespace DuJewelryBridgePattern { /// <summary> /// 璀璨 /// </summary> class GoldGlorious :public Gold { virtual char* parseDesgin(const char* pInlayName, int& iLen) { cout << "Glorious 璀璨:純金材質,擁有天然的24K奪目金色,不易褪色,璀璨奪目:"; iLen = 100; char* presult = new char[iLen]; return presult; } }; } #endif /*****************************************************************//** * \file GoldGentle.h * \brief 橋接模式 Bridge Pattern C++ 14 * 2023年6月3日 塗聚文 Geovin Du Visual Studio 2022 edit. * \author geovindu * \date June 2023 *********************************************************************/ #pragma once #ifndef GOLDGENGLE_H #define GOLDGENGLE_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 "Gold.h" using namespace std; namespace DuJewelryBridgePattern { /// <summary> /// 高尚 /// </summary> class GoldGentle :public Gold { virtual char* parseDesgin(const char* pInlayName, int& iLen) { cout << "Gentle 高尚:達到足金以上的含金量,更具價值;"; iLen = 100; char* presult = new char[iLen]; return presult; } }; } #endif /*****************************************************************//** * \file GoldGenius.h * \brief 橋接模式 Bridge Pattern C++ 14 * 2023年6月3日 塗聚文 Geovin Du Visual Studio 2022 edit. * \author geovindu * \date June 2023 *********************************************************************/ #pragma once #ifndef GOLDGENIUS_H #define GOLDGENIUS_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 "Gold.h" using namespace std; namespace DuJewelryBridgePattern { /// <summary> /// 天賦 /// </summary> class GoldGenius :public Gold { virtual char* parseDesgin(const char* pInlayName, int& iLen) { cout << "Genius 天賦:做工精細,技術前衛,藝術性強,具有先天工藝優勢;"; iLen = 100; char* presult = new char[iLen]; return presult; } }; } #endif /*****************************************************************//** * \file GoldGusty.h * \brief 橋接模式 Bridge Pattern C++ 14 * 2023年6月3日 塗聚文 Geovin Du Visual Studio 2022 edit. * \author geovindu * \date June 2023 *********************************************************************/ #pragma once #ifndef GOLDGUSTY_H #define GOLDGUSTY_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 "Gold.h" using namespace std; namespace DuJewelryBridgePattern { /// <summary> /// 堅定 /// </summary> class GoldGusty :public Gold { virtual char* parseDesgin(const char* pInlayName, int& iLen) { cout << "Gusty 堅定:硬度高,不易變形,且更加輕便;"; iLen = 100; char* presult = new char[iLen]; return presult; } }; } #endif /*****************************************************************//** * \file GeovinDu.h * \brief 橋接模式 Bridge Pattern C++ 14 * 2023年6月3日 塗聚文 Geovin Du Visual Studio 2022 edit. * \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 "Gold.h" #include "GoldGenius.h" #include "GoldGentle.h" #include "GoldGlorious.h" #include "GoldGrace.h" #include "GoldGusty.h" using namespace std; namespace DuJewelryBridgePattern { /// <summary> /// /// </summary> class GeovinDu { private: public: /// <summary> /// /// </summary> void displaySimple(); }; } #endif /*****************************************************************//** * \file GeovinDu.cpp * \brief 橋接模式 Bridge Pattern C++ 14 * 2023年6月3日 塗聚文 Geovin Du Visual Studio 2022 edit. * \author geovindu * \date June 2023 *********************************************************************/ #include "GeovinDu.h" using namespace std; namespace DuJewelryBridgePattern { /// <summary> /// /// </summary> void GeovinDu::displaySimple() { DuJewelryBridgePattern::Gold* pJewelry= new DuJewelryBridgePattern::GoldGrace(); pJewelry->metallurgy("鑲嵌藍寶石"); DuJewelryBridgePattern::Gold* pJewelry2 = new DuJewelryBridgePattern::GoldGlorious(); pJewelry2->metallurgy("鑲嵌綠寶石"); DuJewelryBridgePattern::Gold* pJewelry3 = new DuJewelryBridgePattern::GoldGentle(); pJewelry3->metallurgy("鑲嵌紅寶石"); DuJewelryBridgePattern::Gold* pJewelry4 = new DuJewelryBridgePattern::GoldGenius(); pJewelry4->metallurgy("鑲翡翠玉石"); DuJewelryBridgePattern::Gold* pJewelry5 = new DuJewelryBridgePattern::GoldGusty(); pJewelry5->metallurgy("鑲嵌瑪瑙"); //釋放資源 delete pJewelry; delete pJewelry2; delete pJewelry3; delete pJewelry4; delete pJewelry5; } }
調用:
/*****************************************************************//** * \file ConsoleDuBridgePattern.cpp * \brief 橋接模式 Bridge Pattern C++ 14 * 2023年6月3日 塗聚文 Geovin Du Visual Studio 2022 edit. * \author geovindu * \date June 2023 *********************************************************************/ // ConsoleDuBridgePattern.cpp : 此文件包含 "main" 函數。程序執行將在此處開始並結束。 // #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; using namespace DuJewelryBridgePattern; int main() { std::cout << "Hello World!塗聚文 Geovin Du\n"; GeovinDu geovin; geovin.displaySimple(); cout << "********" << endl; system("pause"); return 0; } // 運行程序: Ctrl + F5 或調試 >“開始執行(不調試)”菜單 // 調試程序: F5 或調試 >“開始調試”菜單 // 入門使用技巧: // 1. 使用解決方案資源管理器窗口添加/管理文件 // 2. 使用團隊資源管理器窗口連接到源代碼管理 // 3. 使用輸出窗口查看生成輸出和其他消息 // 4. 使用錯誤列表窗口查看錯誤 // 5. 轉到“項目”>“添加新項”以創建新的代碼文件,或轉到“項目”>“添加現有項”以將現有代碼文件添加到項目 // 6. 將來,若要再次打開此項目,請轉到“文件”>“打開”>“項目”並選擇 .sln 文件 #define UNICODE
輸出:
Hello World!塗聚文 Geovin Du Grace 優雅:韌性和延展性高,不受傳統黃金材質限制,可打造出優雅時尚的造型;[鑲嵌藍寶石]*顯示pData所指向的緩衝區中的黃金數據。 Glorious 璀璨:純金材質,擁有天然的24K奪目金色,不易褪色,璀璨奪目:[鑲嵌綠寶石]*顯示pData所指向的緩衝區中的黃金數據。 Gentle 高尚:達到足金以上的含金量,更具價值;[鑲嵌紅寶石]*顯示pData所指向的緩衝區中的黃金數據。 Genius 天賦:做工精細,技術前衛,藝術性強,具有先天工藝優勢;[鑲翡翠玉石]*顯示pData所指向的緩衝區中的黃金數據。 Gusty 堅定:硬度高,不易變形,且更加輕便;[鑲嵌瑪瑙]*顯示pData所指向的緩衝區中的黃金數據。 ******** 請按任意鍵繼續. . .