/*****************************************************************//** * \file GoldWebSite.h * \brief 代理模式 ProxyPattern C++ 14 * 2023年5月31日 涂聚文 Geovin Du Visual Studio 2022 edit. * \author geovindu * \date May 2023 *********************************************************************/ #pragma once #ifndef GOLDWEBSITE_H #define GOLDWEBSITE_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 <map> using namespace std; namespace DuJewelryProxyPattern { /// <summary> /// /// </summary> class GoldWebSite { public: /// <summary> /// 执行访问网站的动作,子类中重新实现 /// </summary> virtual void visit() = 0; /// <summary> /// 做父类时析构函数应该为虚函数 /// </summary> virtual ~GoldWebSite() {} }; } #endif /*****************************************************************//** * \file GoldWebSitShopping.h * \brief 代理模式 ProxyPattern C++ 14 * 2023年5月31日 涂聚文 Geovin Du Visual Studio 2022 edit. * \author geovindu * \date May 2023 *********************************************************************/ #pragma once #ifndef GOLDWEBSITESHOPPING_H #define GOLDWEBSITESHOPPING_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 <map> #include "GoldWebSite.h" using namespace std; namespace DuJewelryProxyPattern { /// <summary> /// 某购物网站 /// </summary> class GoldWebSitShopping:public GoldWebSite { public: /// <summary> /// /// </summary> virtual void visit() { //......访问该购物网站,可能涉及到复杂的网络通信 cout << "访问Shopping购物网站!" << endl; } }; } #endif /*****************************************************************//** * \file GoldWebSiteVideo.h * \brief 代理模式 ProxyPattern C++ 14 * 2023年5月31日 涂聚文 Geovin Du Visual Studio 2022 edit. * \author geovindu * \date May 2023 *********************************************************************/ #pragma once #ifndef GOLDWEBSITEVIDEO_H #define GOLDWEBSITEVIDEO_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 <map> #include "GoldWebSite.h" using namespace std; namespace DuJewelryProxyPattern { /// <summary> /// 某视频网站 /// </summary> class GoldWebSiteVideo :public GoldWebSite { public: /// <summary> /// /// </summary> virtual void visit() { //......访问该视频网站,可能涉及到复杂的网络通信 cout << "访问Video视频网站!" << endl; } }; } #endif /*****************************************************************//** * \file GoldWebSiteProxy.h * \brief 代理模式 ProxyPattern C++ 14 * 2023年5月31日 涂聚文 Geovin Du Visual Studio 2022 edit. * \author geovindu * \date May 2023 *********************************************************************/ #pragma once #ifndef GOLDWEBSITEPROXY_H #define GOLDWEBSITEPROXY_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 <map> #include "GoldWebSite.h" using namespace std; namespace DuJewelryProxyPattern { /// <summary> /// 网站代理类 /// </summary> class GoldWebSiteProxy :public GoldWebSite { public: /// <summary> /// 构造函数,引入的目的是传递进来要访问的具体网站 /// </summary> /// <param name="pwebaddr"></param> GoldWebSiteProxy(GoldWebSite* pwebaddr) :mpGoldWebSite(pwebaddr) {} public: /// <summary> /// /// </summary> virtual void visit() { //在这里进行访问的合法性检查、日志记录或者流量限制...... mpGoldWebSite->visit(); //在这里可以进行针对返回数据的过滤...... } private: /// <summary> /// 代表要访问的具体网站 /// </summary> GoldWebSite* mpGoldWebSite; }; } #endif /*****************************************************************//** * \file GoldWebSiteShoppingProxy.h * \brief 代理模式 ProxyPattern C++ 14 * 2023年5月31日 涂聚文 Geovin Du Visual Studio 2022 edit. * \author geovindu * \date May 2023 *********************************************************************/ #pragma once #ifndef GOLDWEBSITESHOPPINGPROXY_H #define GOLDWEBSITESHOPPINGPROXY_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 <map> #include "GoldWebSite.h" #include "GoldWebSitShopping.h" #include "GoldWebSiteProxy.h" using namespace std; namespace DuJewelryProxyPattern { /// <summary> /// /// </summary> class GoldWebSiteShoppingProxy { public: /// <summary> /// /// </summary> virtual void visit() { //在这里进行访问的合法性检查、日志记录或者流量限制...... GoldWebSitShopping* pWebSite= new GoldWebSitShopping(); pWebSite->visit(); //在这里可以进行针对返回数据的过滤...... //释放资源 delete pWebSite; } }; } #endif /*****************************************************************//** * \file GeovinDu.h * \brief 代理模式 ProxyPattern C++ 14 * 2023年5月31日 涂聚文 Geovin Du Visual Studio 2022 edit. * \author geovindu * \date May 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 "GoldWebSite.h" #include "GoldWebSitShopping.h" #include "GoldWebSiteVideo.h" #include "GoldWebSiteShoppingProxy.h" #include "GoldWebSiteProxy.h" #include "GoldReadInfo.h" #include "ReadInfoFromFile.h" #include "ReadInfoProxy.h" using namespace std; namespace DuJewelryProxyPattern { /// <summary> /// /// </summary> class GeovinDu { private: public: /// <summary> /// /// </summary> void displaySimple(); /// <summary> /// /// </summary> void displayFileSimple(); }; } #endif /*****************************************************************//** * \file GeovinDu.cpp * \brief 代理模式 ProxyPattern C++ 14 * 2023年5月31日 涂聚文 Geovin Du Visual Studio 2022 edit. * \author geovindu * \date May 2023 *********************************************************************/ #include "GeovinDu.h" using namespace std; namespace DuJewelryProxyPattern { vector<string> gFileItemList; /// <summary> /// /// </summary> void GeovinDu::displaySimple() { DuJewelryProxyPattern::GoldWebSite* wba1 = new DuJewelryProxyPattern::GoldWebSitShopping(); wba1->visit(); //访问该购物网站 DuJewelryProxyPattern::GoldWebSite* wba2 = new DuJewelryProxyPattern::GoldWebSiteVideo(); wba2->visit(); //访问该视频网站 DuJewelryProxyPattern::GoldWebSite* wba3 = new DuJewelryProxyPattern::GoldWebSitShopping(); DuJewelryProxyPattern::GoldWebSite* wba4 = new DuJewelryProxyPattern::GoldWebSiteVideo(); DuJewelryProxyPattern::GoldWebSiteProxy* wbaproxy1 = new DuJewelryProxyPattern::GoldWebSiteProxy(wba3); wbaproxy1->visit(); //通过代理去访问WebAddr_Shopping购物网站 DuJewelryProxyPattern::GoldWebSiteProxy* wbaproxy2 = new DuJewelryProxyPattern::GoldWebSiteProxy(wba4); wbaproxy2->visit(); //通过代理去访问WebAddr_Video视频网站 DuJewelryProxyPattern::GoldWebSiteShoppingProxy* wbasproxy = new DuJewelryProxyPattern::GoldWebSiteShoppingProxy(); wbasproxy->visit(); //访问的实际是某购物网站 //资源释放 delete wba1; delete wba2; //资源释放 delete wba3; delete wba4; delete wbaproxy1; delete wbaproxy2; //资源释放 delete wbasproxy; } /// <summary> /// /// </summary> void GeovinDu::displayFileSimple() { DuJewelryProxyPattern::GoldReadInfo* preadinfoproxy = new DuJewelryProxyPattern::ReadInfoProxy(); preadinfoproxy->read(); //第一次调用read是借助代理使用真实的主题到文件中拿数据 preadinfoproxy->read(); //后续调用read都是直接从缓存中拿数据 preadinfoproxy->read(); //从缓存中拿数据 ////资源释放 delete preadinfoproxy; } }
调用:
/*****************************************************************//** * \file ConsoleDuProxyPattern.cpp * \brief 代理模式 ProxyPattern C++ 14 * 2023年5月31日 涂聚文 Geovin Du Visual Studio 2022 edit. * * \author geovindu * \date May 2023 *********************************************************************/ // ConsoleDuProxyPattern.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #define _UNICODE #include <iostream> #include "GeovinDu.h" using namespace std; using namespace DuJewelryProxyPattern; int main() { std::cout << "Hello World!涂聚文 Geovin Du\n"; GeovinDu geovin; geovin.displaySimple(); cout << "*************" << endl; geovin.displayFileSimple(); system("pause"); return 0; } // 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单 // 调试程序: F5 或调试 >“开始调试”菜单 // 入门使用技巧: // 1. 使用解决方案资源管理器窗口添加/管理文件 // 2. 使用团队资源管理器窗口连接到源代码管理 // 3. 使用输出窗口查看生成输出和其他消息 // 4. 使用错误列表窗口查看错误 // 5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目 // 6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件 #define UNICODE
输出:
Hello World!涂聚文 Geovin Du 访问Shopping购物网站! 访问Video视频网站! 访问Shopping购物网站! 访问Video视频网站! 访问Shopping购物网站! ************* 从文件中读取了如下数据------------: 1-----1--line------------- 2-----2--line------------- 3-----3--line------------- 从缓存中读取了如下数据------------: 1-----1--line------------- 2-----2--line------------- 3-----3--line------------- 从缓存中读取了如下数据------------: 1-----1--line------------- 2-----2--line------------- 3-----3--line------------- 请按任意键继续. . .
标签:DuJewelryProxyPattern,Pattern,2023,namespace,GoldWebSite,Proxy,visit,cpp,include From: https://www.cnblogs.com/geovindu/p/17447679.html