cpp: Visitor Pattern

发布时间 2023-06-09 06:00:01作者: ®Geovin Du Dream Park™

 

/*****************************************************************//**
 * \file   Gold.h
 * \brief 访问者模式  Visitor Pattern  C++ 14 行为模式
 *  2023年6月8日 涂聚文 Geovin Du Visual Studio 2022 edit.文章来源《C++新经典设计模式》 王健伟编著 清华大学出版社 
 * \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>
#include <map>



using namespace std;



namespace DuJewelryVisitorPattern
{

	class GoldVisitor;
	/// <summary>
	/// 黄金
	/// </summary>
	class Gold
	{

	public:

		/// <summary>
		/// 这里的形参是访问者父类指针
		/// </summary>
		/// <param name="pvisitor"></param>
		virtual void Accept(GoldVisitor* pvisitor) = 0;

	public:
		/// <summary>
		/// 名称
		/// </summary>
		/// <returns></returns>
		virtual string getName() = 0;  

		/// <summary>
		/// 总价格,单位:元
		/// </summary>
		/// <returns></returns>
		virtual float getPrice() = 0;    

	};

}

#endif


/*****************************************************************//**
 * \file   GoldGenius.h
 * \brief  访问者模式  Visitor Pattern  C++ 14 行为模式
 * 2023年6月8日 涂聚文 Geovin Du Visual Studio 2022 edit.文章来源《C++新经典设计模式》 王健伟编著 清华大学出版社
 * \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"
#include "GoldVisitor.h"


using namespace std;




namespace DuJewelryVisitorPattern
{

	

	/// <summary>
	/// 天赋
	/// </summary>
	class GoldGenius:public Gold
	{
	public:

		/// <summary>
		/// 名称
		/// </summary>
		/// <returns></returns>
		virtual string getName()
		{
			return "天赋";
		}

		/// <summary>
		/// 价格
		/// </summary>
		/// <returns></returns>
		virtual float getPrice()
		{
			return 46.8f;   
		}

	public:

		/// <summary>
		/// 
		/// </summary>
		/// <param name="pvisitor"></param>
		void Accept(GoldVisitor* pvisitor);
	


	};
}
#endif


/*****************************************************************//**
 * \file   GoldGentle.h
 * \brief  访问者模式  Visitor Pattern  C++ 14 行为模式
 * 2023年6月8日 涂聚文 Geovin Du Visual Studio 2022 edit.文章来源《C++新经典设计模式》 王健伟编著 清华大学出版社
 * \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"
#include "GoldVisitor.h"

using namespace std;




namespace DuJewelryVisitorPattern
{

	/// <summary>
	/// 高尚
	/// </summary>
	class GoldGentle :public Gold
	{

	public:

		/// <summary>
		/// 名称
		/// </summary>
		/// <returns></returns>
		virtual string getName()
		{
			return "高尚";
		}

		/// <summary>
		/// 价格
		/// </summary>
		/// <returns></returns>
		virtual float getPrice()
		{
			return 111.3f;    
		}

	public:

		/// <summary>
		/// 
		/// </summary>
		/// <param name="pvisitor"></param>
		void Accept(GoldVisitor* pvisitor);


	};

}

#endif

/*****************************************************************//**
 * \file   GoldGlorious.h
 * \brief  访问者模式  Visitor Pattern  C++ 14 行为模式
 * 2023年6月8日 涂聚文 Geovin Du Visual Studio 2022 edit.文章来源《C++新经典设计模式》 王健伟编著 清华大学出版社
 * \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"
#include "GoldVisitor.h"


using namespace std;




namespace DuJewelryVisitorPattern
{

	/// <summary>
	/// 璀璨
	/// </summary>
	class GoldGlorious :public Gold
	{
	public:

		/// <summary>
		/// 名称
		/// </summary>
		/// <returns></returns>
		virtual string getName()
		{
			return "璀璨";
		}

		/// <summary>
		/// 价格
		/// </summary>
		/// <returns></returns>
		virtual float getPrice()
		{
			return 122.0f;    //
		}

	public:

		/// <summary>
		/// virtual
		/// </summary>
		/// <param name="pvisitor"></param>
		 void Accept(GoldVisitor* pvisitor) ; //


	};
}
#endif

/*****************************************************************//**
 * \file   GoldGenius.cpp
 * \brief  访问者模式  Visitor Pattern  C++ 14 行为模式
 * 2023年6月8日 涂聚文 Geovin Du Visual Studio 2022 edit.文章来源《C++新经典设计模式》 王健伟编著 清华大学出版社
 * \author geovindu
 * \date   June 2023
 *********************************************************************/
#include "GoldGenius.h"

using namespace std;




namespace DuJewelryVisitorPattern
{
	/// <summary>
	/// 
	/// </summary>
	/// <param name="pvisitor"></param>
	void GoldGenius::Accept(GoldVisitor* pvisitor)
	{
		pvisitor->VisitElmGenius(this);
	}
}

/*****************************************************************//**
 * \file   GoldGentle.cpp
 * \brief  访问者模式  Visitor Pattern  C++ 14 行为模式
 * 2023年6月8日 涂聚文 Geovin Du Visual Studio 2022 edit.文章来源《C++新经典设计模式》 王健伟编著 清华大学出版社
 * \author geovindu
 * \date   June 2023
 *********************************************************************/
#include "GoldGentle.h"
using namespace std;




namespace DuJewelryVisitorPattern
{


	/// <summary>
	/// 
	/// </summary>
	/// <param name="pvisitor"></param>
	void GoldGentle::Accept(GoldVisitor* pvisitor)
	{
		pvisitor->VisitElmGentle(this);
		
	}
}

/*****************************************************************//**
 * \file   GoldGlorious.cpp
 * \brief  访问者模式  Visitor Pattern  C++ 14 行为模式
 * 2023年6月8日 涂聚文 Geovin Du Visual Studio 2022 edit.文章来源《C++新经典设计模式》 王健伟编著 清华大学出版社
 * \author geovindu
 * \date   June 2023
 *********************************************************************/
#include "GoldGlorious.h"
using namespace std;




namespace DuJewelryVisitorPattern
{

	/// <summary>
	/// 
	/// </summary>
	/// <param name="pvisitor"></param>
	void GoldGlorious::Accept(GoldVisitor* pvisitor)
	{
		pvisitor->VisitElmGlorious(this);
	}

}

/*****************************************************************//**
 * \file   GoldVisitor.h
 * \brief  访问者模式  Visitor Pattern  C++ 14 行为模式
 * 2023年6月8日 涂聚文 Geovin Du Visual Studio 2022 edit.文章来源《C++新经典设计模式》 王健伟编著 清华大学出版社
 * \author geovindu
 * \date   June 2023
 *********************************************************************/
#pragma once
#ifndef GOLDVISITOR_H 
#define GOLDVISITOR_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 "GoldGenius.h"
#include "GoldGentle.h"
#include "GoldGlorious.h"

using namespace std;



namespace DuJewelryVisitorPattern
{

	class GoldGenius;
	class GoldGentle;
	class GoldGlorious;


	/// <summary>
	/// 
	/// </summary>
	class GoldVisitor
	{

	public:
		/// <summary>
		/// 做父类时析构函数应该为虚函数
		/// </summary>
		virtual ~GoldVisitor() {} 
		/// <summary>
		/// 访问元素: virtual  = 0
		/// </summary>
		/// <param name="pelem"></param>
		virtual void VisitElmGenius(GoldGenius* pelem)=0 ;
		/// <summary>
		/// 访问元素:
		/// </summary>
		/// <param name="pelem"></param>
		virtual void VisitElmGentle(GoldGentle* pelem)=0;
		/// <summary>
		/// 访问元素:
		/// </summary>
		/// <param name="pelem"></param>
		virtual void VisitElmGlorious(GoldGlorious* pelem)=0;

		////以下几个接口的名字都叫Visit(成员函数重载)
		//virtual void Visit(GoldGenius* pelem) = 0;   //访问元素:
		//virtual void Visit(GoldGentle* pelem) = 0;  //访问元素:
		//virtual void Visit(GoldGlorious* pelem) = 0;       //访问元素:
	};

}

#endif

/*****************************************************************//**
 * \file   ObjectStructure.h
 * \brief  访问者模式  Visitor Pattern  C++ 14 行为模式
 * 2023年6月8日 涂聚文 Geovin Du Visual Studio 2022 edit.文章来源《C++新经典设计模式》 王健伟编著 清华大学出版社
 * \author geovindu
 * \date   June 2023
 *********************************************************************/
#pragma once
#ifndef OBJECTSTRUCTURE_H
#define OBJECTSTRUCTURE_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"
#include "GoldVisitor.h"
#include "GoldGenius.h"
#include "GoldGentle.h"
#include "GoldGlorious.h"



using namespace std;




namespace DuJewelryVisitorPattern
{

	
	/// <summary>
	/// 对象结构
	/// </summary>
	class ObjectStructure
	{

	public:
		/// <summary>
		/// 增加黄金到黄金列表中
		/// </summary>
		/// <param name="p_mdc"></param>
		void addGold(Gold* p_mdc)
		{
			goldlist.push_back(p_mdc);
		}
		/// <summary>
		/// /
		/// </summary>
		/// <param name="pvisitor"></param>
		void procAction(GoldVisitor* pvisitor)
		{
			for (auto iter = goldlist.begin(); iter != goldlist.end(); ++iter)
			{
				(*iter)->Accept(pvisitor);

			}
		}




	private:

		/// <summary>
		/// 黄金列表
		/// </summary>
		list <Gold*> goldlist; 

	};
}
#endif


/*****************************************************************//**
 * \file   VisitorConsignee.h
 * \brief  访问者模式  Visitor Pattern  C++ 14 行为模式
 * 2023年6月8日 涂聚文 Geovin Du Visual Studio 2022 edit.文章来源《C++新经典设计模式》 王健伟编著 清华大学出版社
 * \author geovindu
 * \date   June 2023
 *********************************************************************/
#pragma once
#ifndef VISITORCONSIGNEE_H
#define VISITORCONSIGNEE_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"
#include "GoldVisitor.h"
#include "GoldGenius.h"
#include "GoldGentle.h"
#include "GoldGlorious.h"



using namespace std;




namespace DuJewelryVisitorPattern
{

	/// <summary>
	/// 取黄金人员
	/// </summary>
	class VisitorConsignee : public GoldVisitor
	{
	public:

		/// <summary>
		/// 
		/// </summary>
		/// <param name="pelem"></param>
		virtual void VisitElmGenius(GoldGenius* pelem)
		{
			cout << "取黄金人员将黄金“" << pelem->getName() << "”拿给了我!" << endl;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="pelem"></param>
		virtual void VisitElmGentle(GoldGentle* pelem)
		{
			cout << "取黄金人员将黄金“" << pelem->getName() << "”拿给了我!" << endl;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="pelem"></param>
		virtual void VisitElmGlorious(GoldGlorious* pelem)
		{
			cout << "取黄金人员将黄金“" << pelem->getName() << "”拿给了我!" << endl;
		}

	};

}

#endif

/*****************************************************************//**
 * \file   VisitorCounselor.h
 * \brief  访问者模式  Visitor Pattern  C++ 14 行为模式
 * 2023年6月8日 涂聚文 Geovin Du Visual Studio 2022 edit.文章来源《C++新经典设计模式》 王健伟编著 清华大学出版社
 * \author geovindu
 * \date   June 2023
 *********************************************************************/
#pragma once
#ifndef VISITORCOUNSELOR_H
#define VISITORCOUNSELOR_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"
#include "GoldVisitor.h"
#include "GoldGenius.h"
#include "GoldGentle.h"
#include "GoldGlorious.h"



using namespace std;




namespace DuJewelryVisitorPattern
{

	/// <summary>
	/// 珠宝顾问
	/// </summary>
	class VisitorCounselor : public GoldVisitor
	{

	public:

		/// <summary>
		/// 天赋
		/// </summary>
		/// <param name="pelem"></param>
		virtual void VisitElmGenius(GoldGenius* pelem)
		{
			cout << "珠宝顾问建议:“天赋”!" << endl;
		}

		/// <summary>
		/// 高尚
		/// </summary>
		/// <param name="pelem"></param>
		virtual void VisitElmGentle(GoldGentle* pelem)
		{
			cout << "珠宝顾问建议:“高尚”!" << endl;
		}

		/// <summary>
		/// 璀璨
		/// </summary>
		/// <param name="pelem"></param>
		virtual void VisitElmGlorious(GoldGlorious* pelem)
		{
			cout << "珠宝顾问建议:“璀璨”!" << endl;
		}

	};
}
#endif

/*****************************************************************//**
 * \file   VisitorTollCollector.h
 * \brief  访问者模式  Visitor Pattern  C++ 14 行为模式
 * 2023年6月8日 涂聚文 Geovin Du Visual Studio 2022 edit.文章来源《C++新经典设计模式》 王健伟编著 清华大学出版社
 * \author geovindu
 * \date   June 2023
 *********************************************************************/
#pragma once
#ifndef VISITORTOLLCOLLECTOR_H
#define VISITORTOLLCOLLECTOR_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"
#include "GoldVisitor.h"
#include "GoldGenius.h"
#include "GoldGentle.h"
#include "GoldGlorious.h"



using namespace std;




namespace DuJewelryVisitorPattern
{

	/// <summary>
	/// 收费人员访问者子类
	/// </summary>
	class VisitorTollCollector : public GoldVisitor
	{
	public:

		/// <summary>
		/// 
		/// </summary>
		/// <param name="pelem"></param>
		virtual void VisitElmGenius(GoldGenius* pelem)
		{
			float tmpprice = pelem->getPrice();
			cout << "收费人员累计黄金“" << pelem->getName() << "”的价格:" << tmpprice << endl;
			totalCost += tmpprice;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="pelem"></param>
		virtual void VisitElmGentle(GoldGentle* pelem)
		{
			float tmpprice = pelem->getPrice();
			cout << "收费人员累计黄金“" << pelem->getName() << "”的价格:" << tmpprice << endl;
			totalCost += tmpprice;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="pelem"></param>
		virtual void VisitElmGlorious(GoldGlorious* pelem)
		{
			float tmpprice = pelem->getPrice();
			cout << "收费人员累计黄金“" << pelem->getName() << "”的价格:" << tmpprice << endl;
			totalCost += tmpprice;
		}

		/// <summary>
		/// 返回总费用
		/// </summary>
		/// <returns></returns>
		float getTotalCost()
		{
			return totalCost;
		}
	private:

		/// <summary>
		/// 总费用
		/// </summary>
		float totalCost = 0.0f;  

	};
}


#endif


/*****************************************************************//**
 * \file   GeovinDu.h
 * \brief  访问者模式  Visitor Pattern  C++ 14 行为模式
 * 2023年6月8日 涂聚文 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 "Gold.h"
#include "GoldVisitor.h"
#include "GoldGenius.h"
#include "GoldGentle.h"
#include "GoldGlorious.h"

#include "GoldProcess.h"

#include "VisitorConsignee.h"
#include "VisitorCounselor.h"
#include "VisitorTollCollector.h"
#include "ObjectStructure.h"


using namespace std;




namespace DuJewelryVisitorPattern
{

	/// <summary>
	/// 
	/// </summary>
	class GeovinDu
	{
	private:


	public:

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

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



	};

}

#endif

/*****************************************************************//**
 * \file   GeovinDu.cpp
 * \brief  访问者模式  Visitor Pattern  C++ 14 行为模式
 * 2023年6月8日 涂聚文 Geovin Du Visual Studio 2022 edit.文章来源《C++新经典设计模式》 王健伟编著 清华大学出版社
 * \author geovindu
 * \date   June 2023
 *********************************************************************/
#include "GeovinDu.h"


using namespace std;




namespace DuJewelryVisitorPattern
{

	/// <summary>
	/// 
	/// </summary>
	void GeovinDu::displaySimple()
	{
		DuJewelryVisitorPattern::Gold* pm1 = new DuJewelryVisitorPattern::GoldGenius(); 
		DuJewelryVisitorPattern::Gold* pm2 = new DuJewelryVisitorPattern::GoldGentle(); 
		DuJewelryVisitorPattern::Gold* pm3 = new DuJewelryVisitorPattern::GoldGlorious();     

		DuJewelryVisitorPattern::GoldProcess mdcprocobj;
		mdcprocobj.addGold(pm1);
		mdcprocobj.addGold(pm2);
		mdcprocobj.addGold(pm3);
		mdcprocobj.procAction("收费人员");
		mdcprocobj.procAction("取黄金人员");

		//释放资源
		delete pm1;
		delete pm2;
		delete pm3;

	}
	/// <summary>
	/// 
	/// </summary>
	void GeovinDu::displayDuSimple()
	{
		DuJewelryVisitorPattern::VisitorTollCollector visitorgeovindu; //收费人员访问者子类,里面承载着向我收费的算法
		DuJewelryVisitorPattern::GoldGenius goldasplcrp;
		DuJewelryVisitorPattern::GoldGentle  goldfftdnhsp;
		DuJewelryVisitorPattern::GoldGlorious golddlx;

		//各个元素子类调用Accept接受访问者的访问,就可以实现访问者要实现的功能
		goldasplcrp.Accept(&visitorgeovindu); //累加价格 
		goldfftdnhsp.Accept(&visitorgeovindu);//累加价格
		golddlx.Accept(&visitorgeovindu);     //累加价格

		cout << "所有黄金的总价为:" << visitor_geovindu.getTotalCost() << ",收费人员收取了我的费用!" << endl;

		//----
		DuJewelryVisitorPattern::VisitorConsignee visitordu; //取黄金员访问者子类,里面承载着向我发黄金的算法
		goldasplcrp.Accept(&visitordu); 
		goldfftdnhsp.Accept(&visitordu);
		golddlx.Accept(&visitordu);     

		//-----
		DuJewelryVisitorPattern::VisitorCounselor visitorgeovin;  //珠宝顾问访问者子类,里面承载着为我配置算法
		goldasplcrp.Accept(&visitorgeovin); 
		goldfftdnhsp.Accept(&visitorgeovin);
		golddlx.Accept(&visitorgeovin);     


		//---------
		DuJewelryVisitorPattern::ObjectStructure objstruc;
		objstruc.addGold(&goldasplcrp);
		objstruc.addGold(&goldfftdnhsp);
		objstruc.addGold(&golddlx);
		objstruc.procAction(&visitorgeovin);

	}

}

  

调用:

/*****************************************************************//**
 * \file   ConsoleDuVisitorPattern.cpp
 * \brief  访问者模式  Visitor Pattern  C++ 14 行为模式
 * 2023年6月8日 涂聚文 Geovin Du Visual Studio 2022 edit.文章来源《C++新经典设计模式》 王健伟编著 清华大学出版社
 * 
 * \author geovindu
 * \date   June 2023
 *********************************************************************/
// ConsoleDuVisitorPattern.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#define _UNICODE


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

using namespace std;
using namespace DuJewelryVisitorPattern;


int main()
{
    std::cout << "Hello World!!涂聚文 Geovin Du\n";
    GeovinDu geovin;
    geovin.displaySimple();

    cout << "************" << endl;
    geovin.displayDuSimple();




    system("pause");
    return 0;
}

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

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

  

输出:

Hello World!!涂聚文 Geovin Du
收费人员累计黄金“天赋”的价格:46.8
收费人员累计黄金“高尚”的价格:111.3
收费人员累计黄金“璀璨”的价格:122
所有黄金的总为:280.1,收费人员收取了我的费用!
取黄金人员将黄金“天赋”拿给了我!
取黄金人员将黄金“高尚”拿给了我!
取黄金人员将黄金“璀璨”拿给了我!
************
收费人员累计黄金“天赋”的价格:46.8
收费人员累计黄金“高尚”的价格:111.3
收费人员累计黄金“璀璨”的价格:122
所有黄金的总价为:280.1,收费人员收取了我的费用!
取黄金人员将黄金“天赋”拿给了我!
取黄金人员将黄金“高尚”拿给了我!
取黄金人员将黄金“璀璨”拿给了我!
珠宝顾问建议:“天赋”!
珠宝顾问建议:“高尚”!
珠宝顾问建议:“璀璨”!
珠宝顾问建议:“天赋”!
珠宝顾问建议:“高尚”!
珠宝顾问建议:“璀璨”!
请按任意键继续. . .