首页 > 其他分享 >cpp: Proxy Pattern

cpp: Proxy Pattern

时间:2023-05-31 23:47:04浏览次数:61  
标签:DuJewelryProxyPattern Pattern 2023 namespace GoldWebSite Proxy visit cpp include

 

/*****************************************************************//**
 * \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

相关文章

  • kibana智能检索发送多次_msearch —— 配置index pattern,同时设置时间段,就知道到底是
    kibanasite/elasticsearch/log-*/_field_stats?level=indices   返回:{"_shards":{"total":600,"successful":600,"failed":0},"indices":{"log-2017.11.22-19-192.168.2.3-93004":{"fields":{"Rec......
  • 解释器模式(Interpreter Pattern)
    解释器模式(InterpreterPattern)一、定义解释器模式(InterpreterPattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在SQL解析、符号处理引擎等。给定一个语言,定义它的文法的一种表示,并定义......
  • cassandra cpp driver中bind list——用cass_statement_bind_collection函数
     CassErrorinsert_into_collections(CassSession*session,constchar*key,constchar*items[]){CassErrorrc=CASS_OK;CassStatement*statement=NULL;CassFuture*future=NULL;CassCollection*collection=NULL;constchar**item=NULL;c......
  • Abstract Factory Pattern 抽象工厂模式简介与 C# 示例【创建型】【设计模式来了】
    〇、简介1、什么是抽象工厂模式?一句话解释:  通过对抽象类和抽象工厂的一组实现,独立出一系列新的操作,客户端无需了解其逻辑直接访问。抽象工厂模式(AbstractFactoryPattern)是一种创建型模式。它用于创建一组相关对象的家族。强调的是一组对象之间的协作关系,而不是单个对象之......
  • Kali内置代理工具Proxychains的简单使用
    1.介绍Kali中内置了ProxyChains开源代理工具,通过使用这个工具,可以让我们隐藏真实ip实现攻击、代理上网等使用ProxyChains,用户可以在KaliLinux中配置不同类型的代理服务器,包括HTTP、SOCKS4和SOCKS5代理。此外,用户还可以为不同的目标指定不同的代理服务器,以确保他们的行为不被检......
  • vscode配置单个cpp文件打断点的文件
    (51条消息)【工具】VScode设置断点调试(以cpp为例)_vdcode运行断点cpp_沙diao网友的博客-CSDN博客launch.json内容{//UseIntelliSensetolearnaboutpossibleattributes.//Hovertoviewdescriptionsofexistingattributes.//Formoreinformation,......
  • cpp: State Pattern
     /*****************************************************************//***\fileGold.h*\briefStatePattern状态模式C++14*2023年5月29日涂聚文GeovinDuVisualStudio2022edit.*\authorgeovindu*\dateMay2023************************......
  • axios 或 @nestjs/axios 错误地应用 npm config proxy
    npmproxy$npmconfiggetproxyhttp://127.0.0.1:25378/如果你的npm设置了如上代理,那么当请求本地服务时,应该会出现代理错误(通常是502响应):import{HttpService}from'@nestjs/axios';@Injectable()exportclassForwardService{@Inject()privatereadonlyhtt......
  • Factory Method Pattern 工厂方法模式简介与 C# 示例【创建型】【设计模式来了】
    〇、简介1、什么是工厂方法模式?一句话解释:  实体类和工厂类均为单独实现,不影响已实现的类,方便扩展。工厂方法模式(FactoryMethodPattern)是一种创建型模式,它允许客户端通过工厂方法来创建对象,而不是直接使用构造函数。这样可以让客户端代码更加灵活,同时保持实现的独立性。工......
  • AopContext.currentProxy();
    获取代理对象的方法:AopContext.currentProxy();在同一个类中,非事务方法A()调用事务方法B(),事务失效,得采用((xxxObj)AopContext.currentProxy()).B()来进行调用,事务才能生效。B方法被A调用,对B方法的切入失效,但加上AopContext.currentProxy()创建了代理类,在代理类中调用该方......