设计模式|代理模式(Proxy Pattern)

news/2024/9/24 10:17:02/

文章目录

什么是代理模式

代理模式(Proxy Pattern)是一种结构型设计模式,它允许你提供一个间接访问对象的方式,以控制对对象的访问。这种模式通常在不改变原始类代码的情况下,添加一些额外的逻辑或控制。
想象一下你有一个类 A,但是你不希望直接使用它,可能是因为它需要进行一些复杂的操作或者是因为你想对其进行保护。这时你可以创建一个代理类 B,它具有与类 A 相同的接口,这样客户端代码可以通过代理类 B 访问类 A。代理类 B 可以在调用类 A 的方法之前或之后添加额外的逻辑。

举例

假设你有一个网络下载器类 Downloader,它负责从互联网下载文件。但是,直接使用 Downloader 类可能存在安全风险,因为它可以访问互联网上的任何文件。这时你可以创建一个代理类 DownloaderProxy,它实现与 Downloader 相同的接口,但在调用下载方法之前,它会检查文件的类型或者权限。这样,即使在使用 DownloaderProxy 时,你也可以控制文件下载的行为。

在实际开发中,代理模式可以用于实现许多场景,比如远程代理、虚拟代理、保护代理等。每种代理类型都有自己的特点和用途,但它们的基本原理都是相同的:通过引入一个中间层(代理),来控制对原始对象的访问。

结构

代理模式由以下几个结构组成:

  1. Subject(抽象主题):Subject 定义了 RealSubject 和 Proxy 的共同接口,这样在任何使用 RealSubject 的地方都可以使用 Proxy。这通常是一个接口或抽象类。
  2. RealSubject(真实主题):RealSubject 是实际执行业务逻辑的类。在代理模式中,客户端最终想要使用的是 RealSubject 提供的功能。
  3. Proxy(代理):Proxy 类包含一个对 RealSubject 对象的引用,并提供与 RealSubject 相同的接口,以便可以用 Proxy 来替代 RealSubject。Proxy 通常负责在调用 RealSubject 之前或之后执行一些额外的操作,例如权限检查、缓存、延迟加载等。

在这个结构中,客户端通过代理访问真实主题,代理在必要时将请求传递给真实主题,并在调用前后执行一些额外的逻辑。这种方式使得代理可以控制对真实主题的访问,并在不改变客户端代码的情况下,提供额外的功能。

优缺点

代理模式具有以下优点和缺点:

优点

  1. 代理控制访问代理模式允许代理对象控制对真实对象的访问。这使得代理可以在访问前后执行一些额外的逻辑,如权限验证、缓存、日志记录等。
  2. 解耦合:通过引入代理对象,客户端和真实对象之间的耦合度降低。客户端可以通过代理间接访问真实对象,而不必直接与其交互,从而更容易管理和扩展系统。
  3. 保护真实对象:代理可以充当真实对象的保护层,控制对真实对象的访问。这可以防止客户端直接访问真实对象,从而提高系统的安全性。
  4. 延迟加载代理模式支持延迟加载,即在需要时才创

http://www.ppmy.cn/news/1431410.html

相关文章

众筹商城源码 众筹农业平台 农业乘科技富强之路 线上农业众筹 养殖系统 种植系统源码

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 前端是编译后的,后端PHP,带商城,详情看下图 特点和功能: 用户管理:包括注册、登录、个人信息管理等。 项目创建与展示&…

Hadoop3:大数据生态体系

一、技术层面 通过下面这张图,我们可以大概确定,在大数据行业里,自己的学习路线。 个人认为,Hadoop集群一旦搭建完工,基本就是个把人运维的事情 主要岗位应该是集中在数据计算层,尤其是实时计算&#xff…

最新Linux VPS上设置远程Redis服务器教程

Linux VPS上设置远程Redis服务器步骤为:1.安装Redis后端;2.启动Redis Server后端服务;3.确认运行;4.使用ifconfig获取公共IPv4地址;5.绑定IPv4地址;6.重新启动Redis;7.验证外部主机访问。 Redi…

vue的优化手段

vue常见优化手段 使用key 对于通过循环生成的列表,应给每个列表项一个稳定且唯一的key,这有利于在列表变动时,尽量少的删除、新增、改动元素。 使用 index 作为 key 值,唯一但是不稳定。 一般情况下,应该选取 id 作为key值。 使用冻结对象 冻结的对象不会被响应化。…

近年数一,数二难度如何,听说24是像张宇那样的题?

直接上分数! “估分一百零几,平时李林130-140,张八110-125的样子,超越做的分数也是100出头。” 24学长说: “远离李林张八!张四没做不评价。” “李林张八暑假前做完当作打基础即可。超越才是真题难度”…

近年数一,数二难度如何,听说24是像张宇那样的题?

直接上分数! “估分一百零几,平时李林130-140,张八110-125的样子,超越做的分数也是100出头。” 24学长说: “远离李林张八!张四没做不评价。” “李林张八暑假前做完当作打基础即可。超越才是真题难度”…

服务器如何开启远程连接?

服务器开启远程连接是网络管理中一项重要的功能。通过远程连接,用户可以在任何地方远程访问服务器,从而进行管理、维护和监控等操作。远程连接的开启可以为工作提供便利性和效率,但同时也带来了安全风险。确保远程连接的安全性和可靠性是至关…

Jenkins CI/CD 持续集成专题二 Jenkins 相关问题汇总

一 问题一 pod [!] Unknown command: package 1.1 如果没有安装过cocoapods-packager,安装cocoapods-packager,sudo gem install cocoapods-packager 1.2 如果已经安装cocoapods-packager,还是出现上面的错误,有可能是pod的安…