C++之代理模式

C++结构型模式-代理模式 1 模式介绍 代理模式(Proxy Pattern):给某一个对象提供一个代理,并由代理对象控制对原对象的引用。 2 模式结构 3 模式优缺点 4 模式应用 5 模式实现 参考文献: 【1】 阅读详情

目录

模式思想

简介

组成

优点

代码实现

情景

如果不使用代理的话:

加代理的话:

结果


模式思想

简介

代理模式:    通过代理类,来控制实际对象的访问权限。

在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

代理模式 属于 结构型模式。

组成

  • 抽象角色:通过接口或抽象类声明真实角色实现的业务方法;
  • 真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用;
  • 代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。(访问权限)

优点

  1. 职责清晰:真实的角色就是实现实际的业务逻辑,不用关心其他非本职的事务,通过后期的代理来完成事务,附带的结果就是编程简洁清晰;
  2. 代理对象可以在客户端和目标对象之间起到中介的作用,保护了目标对象;
  3. 高扩展性。

代码实现

情景

了解了代理模式的定义和优点以后,我们来模拟这样一个场景:

我们上视频网站上去看电影,电影也分有好几个级别:  免费电影、VIP电影、用券电影,不同的人可以看不同级别的电影

如果不使用代理的话:

 我们可以看到还是纯在有很多的不足的,没用访问权限的控制。

加代理的话:

通过代理类,来控制用户的访问权限。

//抽象类
class VideoSite
{
public:
	virtual void freeMovie() = 0;  //免费电影
	virtual void vipMovie() = 0;   //vip电影
	virtual void ticketMovie() = 0;//用券电影
};

//委托类
class FixBugVideoSite : public VideoSite 
{
public:
	virtual void freeMovie()  //免费电影
	{
		cout << "观看免费电影" << endl;
	}
	virtual void vipMovie()   //vip电影
	{
		cout << "观看vip电影" << endl;
	}
	virtual void ticketMovie() //用券电影
	{
		cout << "用券观看电影" << endl;
	}
};

//普通用户代理类
class FreeVideSiteProxy : public VideoSite
{
public:
	FreeVideSiteProxy()
	{
		pVideo = new FixBugVideoSite();
	}
	~FreeVideSiteProxy()
	{
		delete pVideo;
	}
	virtual void freeMovie()  //免费电影
	{
		pVideo->freeMovie(); //通过代理对象的freeMovie,来访问真正委托类对象的freeMovie方法
	}
	virtual void vipMovie()   //vip电影
	{
		cout << "不好意思,您不是VIP,请先充值。"<<endl;
	}
	virtual void ticketMovie()//用券电影
	{
		cout << "不好意思,您没有券,请先购买。"<<endl;
	}
private:
	FixBugVideoSite* pVideo;
};

//VIP用户代理类
class vipVideSiteProxy : public VideoSite
{
public:
	vipVideSiteProxy()
	{
		pVideo = new FixBugVideoSite();
	}
	~vipVideSiteProxy()
	{
		delete pVideo;
	}
	virtual void freeMovie()  //免费电影
	{
		pVideo->freeMovie(); //通过代理对象的freeMovie,来访问真正委托类对象的freeMovie方法
	}
	virtual void vipMovie()   //vip电影
	{
		pVideo->vipMovie();
	}
	virtual void ticketMovie()//用券电影
	{
		cout << "不好意思,您没有券,请先购买。"<<endl;
	}
private:
	VideoSite* pVideo;
};

可以看到,我们代码里面的委托类FixBugVideoSite就是上面提到的真实角色。它拥有了该网站所有视频的观看权限。
每一个代理类都有一个委托类的数据成员。代理类通过委托类来访问视频网站。并且,可以根据当前代理的用户的身份(普通游客、VIP会员),来限制其访问的内容。

为了模拟在视频网站上浏览视频的全部情景,我们可以设计一个函数,专门用来观看电影(免费电影、VIP电影、用券观看的电影)

void watchMovie(unique_ptr<VideoSite>& ptr)
{
	ptr->freeMovie();
	ptr->vipMovie();
	ptr->ticketMovie();
}

结果

运行下面的代码:

void main()
{
	unique_ptr<VideoSite> p1 (new FreeVideSiteProxy());
	unique_ptr<VideoSite> p2(new vipVideSiteProxy());

	watchMovie(p1);
	cout << "--------------------------" << endl;
	watchMovie(p2);
}

 

突破编程_C++_设计模式(代理模式) C++ 设计模式:代理模式 阅读详情

相关推荐

C++代理模式的实现

代理模式 - Proxy Pattern模式思想简介组成优点代码实现情景代码解读结果参考资料 模式思想 简介 代理模式:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。 组成 抽象角色:通过接口或抽象类声明真实角色实现的业务方法; 真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用; 代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己

YY_Song 's blogs 384

设计模式之代理模式(C++)

介绍设计模式之代理模式

翟天保的博客 2万+

设计模式C++实现(8)——代理模式

软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最近看设计模式的书,对于每个模式,用C++写了个小例子,加深一下理解。主要参考《大

wuzhekai的专栏 3万+

【Proxy模式】C++设计模式——代理模式

C++代理模式,Proxy模式,本文以现实社会例子来阐述该模式,通过对代理模式的概括、总结、代码对比分析来帮助读者了解该模式

不负AC不负卿的博客 2845

C++ 代理模式

代理模式(Proxy Pattern)为其他对象提供了一种代理,以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

青春不老,奋斗不止! 1万+

C++代理模式

代理模式是一种结构型设计模式,它允许通过创建一个代理对象来控制对另一个对象的访问。代理对象充当原始对象的接口,客户端通过代理对象进行交互,代理对象则处理客户端请求并在必要时将其转发给原始对象。通过代理模式,我们可以控制对真实图片对象的访问,并在必要时添加额外的逻辑。在C++中实现代理模式可以使用类来表示代理对象和原始对象,并定义它们共同的接口。时,由于图片已经加载过了,代理对象直接调用已加载的图片对象的。类,它是实际的图片类,负责加载和显示真正的图片。时,代理对象会创建并加载真正的图片对象,并调用其。

CodeByte的博客 150

【C++】代理模式

代理模式(Proxy Pattern)是一种【结构型】设计模式,它允许通过代理对象控制对另一个对象(目标对象)的访问。代理对象在客户端和目标对象之间充当中间层,负责处理与目标对象的交互,例如延迟加载、访问控制、缓存或日志记录等。

AAADiao的博客 1303

设计模式C++学习之代理模式(Proxy)

设计模式C++学习之代理模式(Proxy)

C++ 代理模式(Proxy Pattern)

随意写的,主要用作代码练习,防止代码生疏,敬请见谅! 本意是能够写成一个多用途的代理模式,结果还是写废了,其他方面来说,没有时间重整它,有的写法是没有太大意义的。期望有点价值吧 首先放一个代理模式的讲解,个人觉得写得不错,如果你是寻求代理模式的用法用途的话,值得一看: 代理模式原理及实例讲解 //ProxyPattern.h #pragma once #include #inc

你好,旅行者 1210

BDD测试之Behave使用入门

BDD测试(Behavior-Driven Development Testing)是一种基于“行为驱动开发”(BDD)理念。

想要成为酷盖但是失败的小明 580

汇川EASY521 PLC实战指南:从硬件选型到程序架构与故障排查

可编程逻辑控制器(PLC)是工业自动化系统的核心大脑,其工作原理基于循环扫描机制,持续读取输入、执行用户程序并更新输出。这种确定性控制方式,使其在逻辑控制、顺序控制和运动控制中具有不可替代的技术价值,广泛应用于机械设备、生产线和过程控制等场景。对于汇川EASY521这类紧凑型高性能PLC,其核心优势在于集成了运动控制与丰富通讯接口,为中小型设备提供了高性价比的一站式解决方案。在实际应用中,工程师常需处理如“汇川sv660n”伺服驱动器的集成调试,或利用“hslcommunication”等开源库实现C#上位

weixin_42525264的博客 736

[C++]代理模式

代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。 C++代码如下: // 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // // 参考大话设计模式 #include <iostream> using namespace std; class CGiveGift { public: vir...

就是那个党伟 403

docker部署zabbix6.2.7+grafana

docker部署zabbix6.2.7+grafana。

qq_48391148的博客 3654

C++ 设计模式——代理模式

代理模式(Proxy Pattern)是一种结构型设计模式,通过代理对象控制对其他对象的访问。代理模式通常用于控制对某个对象的访问,提供额外的功能,如延迟加载、访问控制、日志记录等。 其主要实现思想是在客户端和真正要访问的对象之间引入一个代理对象(间接层),于是,以往客户端对真正对象的访问现在变成了通过代理对象进行访问,代理对象在这里起到了一个中介或者桥梁作用。引人代理对象的主要目的是可以为客户端增加额外的功能、约束或针对客户端的调用屏蔽一些复杂的细节问题。

慢慢记录,慢慢更新。 2508

Android-S无线模块前瞻

WiFi - mainlane非强制 S 采用反射的方法直接加载wifiservice,直接hook在systemserver上,无编译依赖。gms可以动态替换wifi服务。 R 采用直接启动service的方式,wifiservice仍然map在systemserver上。 WiFi - 11ad接口支持 11ad被wifi联盟商业化为WIGIG,提供短距的60GHZ载波,理论速度为当前5G 11ac的6倍。市面上基本没有手机支持,需要独立的芯片支撑此功能。 传输距离为3m以内,外界d.

头铁的伦的博客 1043

Audio2Face进阶玩法:结合LiveLink在UE5中实现MetaHuman全身动画+语音驱动(保姆级配置指南)

本文提供了一份详尽的保姆级教程,指导如何将NVIDIA Audio2Face与Unreal Engine 5的LiveLink功能结合,实现驱动MetaHuman数字人面部表情的同时,无缝融合身体动画。文章详细讲解了从环境准备、插件部署、基础面部驱动测试,到动画蓝图高级配置与多数据流融合的全流程,并分享了性能优化与问题排查的实战经验,旨在帮助创作者打造表情与肢体动作协调统一的生动数字人。

q9w8e7r6t5的博客 196

C++ · 设计模式 (接口隔离=Proxy<代理模式>)

代理模式是一种结构型设计模式,用于控制对对象的访问。它通过引入代理对象在不修改原对象的情况下增加额外功能或限制访问。核心思想是"间接访问",符合开闭原则和单一职责原则。典型应用场景包括虚拟代理(延迟加载)、保护代理(访问控制)、远程代理(网络通信)和智能引用(资源管理)。C++中常见于智能指针、RPC框架等实现。该模式通过代理类控制对真实主题的访问,可在调用前后添加额外逻辑,客户端无需感知使用的是代理还是真实对象。

qq_35223555的博客 810

在ABAQUS中使用VUMAT子程序实现Hashin失效准则的详细解析与实践:深入探讨复合材料模拟仿真的高级编程技巧

Hashin失效准则是由材料科学家Shlomo Hashin于1962年提出的一种基于能量方法的多向失效理论,主要用于预测复合材料的破坏行为。与传统的单向失效理论不同,Hashin准则考虑了材料内部的多种独立破坏机制,如基体断裂、界面脱粘、纤维断裂等,这些机制在不同应力状态下可能同时或分别发生。通过计算各个机制的能量释放率,Hashin失效准则能够更为准确地预测复合材料在复杂应力状态下的破坏行为。

qq_38334677的博客 1949

C++设计模式代理模式

我们还定义了一个代理对象 Proxy,该对象包含了实际对象 RealSubject 并实现了相同的接口。在代理对象的请求方法中,我们执行了一些额外的操作并调用了真实对象的请求方法。使用代理模式可以隐藏真实对象的复杂性,并提供更加简单的接口。它也可以实现对象之间的松耦合,使得我们可以独立地改变真实对象的实现,而不必影响到客户端。代理模式(Proxy Pattern)是一种结构型设计模式,它提供了一个代理对象来控制对另一个对象的访问。代理对象与原始对象具有相同的接口,因此客户端可以不知道代理对象的存在。

guoguo0524的博客 972

02 - GRACE数据处理步骤简叙

本篇对GRACE数据处理的过程进行了介绍,简单叙述了进行数据各种改正的原因,可以帮助理解GRACE数据处理理论,本文借鉴了多篇优秀博士论文。希望可以对👪有所帮助。

weixin_43339605的博客 3348

ARM 之十六 详解 CMSIS 版本变迁、各组件使用示例

目前,CMSIS 已经发展到了第六版,其目录结构也发生了重大的变化。在不断发展中,很多原来 CMSIS 的组件被不断独立出去,并因此成立了很多开源社区,今天就来学习一下!由于 CMSIS 已经包含了相当丰富的文档,因此,本文重点学习版本之间的变化以及一些实际使用示例。

技术干货 1954

C++设计模式---代理模式

(1)远程代理(Remote Proxy):为一个位于不同地址空间的对象提供一个本地的代理对象,这个对象作为该远程对象的代表,以隐藏一个对象存在于不同地址空间的事实。代理对象在客户端和目标对象之间起到中介的作用,可以隐藏目标对象的实现细节,增加额外的功能(如访问控制、日志记录、性能监控等),或者对目标对象的访问进行优化。(2)代理对象(Proxy):持有目标对象的引用,控制对目标对象的访问,并可能提供额外的功能。(1)目标对象(Real Subject):代理对象所代表的真实对象,是最终要引用的对象。

专注 745

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

C++ 设计模式之代理模式

⽐如说有⼀个⽂件加载的场景,为了避免直接访问“⽂件”对象,我们可以新增⼀个代理对象,代理对象中有⼀个对“⽂件对象”的引⽤,在代理对象的 load ⽅法中,可以在访问真实的⽂件对象之前进⾏⼀些操作,⽐如权限检查,然后调⽤真实⽂件对象的 load ⽅法,最后在访问真实对象后进⾏其他操作,⽐如记录访问⽇志。代理模式可以控制客户端对真实对象的访问,从⽽限制某些客户端的访问权限,此外代理模式还常⽤在访问真实对象之前或之后执⾏⼀些额外的操作(⽐如记录⽇志),对功能进⾏扩展。代理模式的主要⽬的是控制对对象的访问。

K1_uestc的博客 1579

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Qt C++设计模式->代理模式

是一种结构型设计模式,允许通过代理对象来控制对其他对象的访问。代理模式可以在不改变真实对象的情况下,提供额外的控制逻辑,如访问控制、延迟加载、日志记录等。

m0_46494667的博客 1271

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

C++设计模式-代理模式

目录 基本概念 代码及演示 基本概念 代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。 UML图如下: 以本人目前(2019-06-12)个人的水平对代理的认识: 真实对象可以用于存储数据,并做一些基本的逻辑。 代理可以进行复制的逻辑。 代码及演示 程序运行截图如下: 结构如下: Head.h #ifndef H...

IT1995的博客 4606

c++代理模式

c++代理模式简介UML优点缺点使用场景代码参考 简介 代理模式也称为委托模式。作用就是找一个对象来替我们访问某个对象。 意图:为其他对象提供一种代理以控制对这个对象的访问。 UML 1.Subject:定义RealSubject和Proxy的共用接口,这样就可以在任何使用RealSubject的地方都可以使用Proxy。 2.RealSubject:真实处理业务的角色。 3.Proxy:保存一个引用使得代理可以访问实体。 优点 职责清晰:真实角色就是实现实际的业务逻辑,不关心其他非本职责的事务,通过后期

lvxu666的博客 267
上一篇: C++之工厂模式
下一篇: C++之装饰器&适配器模式
Flying  clouds
博客等级 码龄5年 557粉丝 81原创
评论 15
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值