cpp: Bridge Pattern

 

/*****************************************************************//**
 * \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所指向的緩衝區中的黃金數據。
********
請按任意鍵繼續. . .

  

 

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