结构型设计模式之代理模式【设计模式系列】

代理模式是一种结构型设计模式,旨在不修改原始类的情况下,通过引入代理类来添加额外功能或控制对原始对象的访问。代理模式适用于远程代理、虚拟代理、安全代理等场景,能降低系统耦合度并提供扩展性。然而,它也可能导致请求处理速度变慢并增加额外实现复杂性。

系列文章目录

C++技能系列
Linux通信架构系列
C++高性能优化编程系列
深入理解软件架构设计系列
高级C++并发线程编程
设计模式系列

期待你的关注哦!!!
在这里插入图片描述

现在的一切都是为将来的梦想编织翅膀,让梦想在现实中展翅高飞。
Now everything is for the future of dream weaving wings, let the dream fly in reality.

一、代理模式介绍

⚠️ 意图:
在不改变原始类(或称为被代理类)的情况下,通过引入代理类来给原始类附加不相关的其他功能。为其他对象提供一种代理控制对这个对象的访问。

⚠️ 主要解决:
在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。

⚠️ 何时使用:
想在访问一个类时做一些控制。

⚠️ 如何解决:
增加中间层。

在这里插入图片描述

图1_1 代理模式类图

代理模式本质是在访问对象的时候引入了一定程度的间接性,由于间接性访问对象,可以附加多种用途。

二、代理模式优缺点

2.1 优点

  • 代理模式能够协调调用者和被调用者,在一定程度上降低了系统的耦合度。

  • 职责清晰。实现好内部结构就可以,具体客户要求由代理进行分化。

  • 高扩展性。具体主题角色随时变化,只要实现了接口,无论如何都逃不出代理的手掌,所以代理无论如何都是可以使用的。

  • 远程代理使得客户端可以访问在远程机器上的对象,远程机器可能具有更好的计算性能与处理速度,可以快速响应并处理客户端请求。

  • 虚拟代理通过使用一个小对象来代表一个大对象,可以减少系统资源的消耗,对系统进行优化并提高运行速度。

  • 保护代理可以控制对真实对象的使用权限。

2.2 缺点

  • 由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。

  • 实现代理模式需要额外的工作,有些代理模式的实现非常复杂。

三、代理模式使用场景

  • 远程代理:为一个对象在不同的地址空间提供局部代表,可以隐藏一个对象存在于不同地址空间的事实。

  • 虚拟代理:根据需要创建开销很大的对象。通过虚拟代理来存放实例化需要很长时间的真实对象。例如:图片加载的时候。

  • 安全代理:用来控制真是对象访问时的权限。

  • 智能指引:当调用真实的对象的时候,代理处理另外一些事。

    如果用户不能直接访问真实角色,只能访问代理,则需要让代理自动生成一个真实角色对象。

    适配器模式中适配器为所适配的对象提供了一个不同的接口,代理模式中代理提供的接口与实体的接口相同。装饰模式的目的是为对象添加功能,而代理模式则控制对对象的访问。

四、代理模式实现

Subject抽象类:

#ifndef SUBJECT_H
#define SUBJECT_H
#include <iostream>
using namespace std;
 
//定义了Proxy和ConcreteSubject的公有接口
class Subject
{
   
   
publ
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Allen.Su

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值