设计模式十三:代理(Proxy Pattern)

代理模式是一种结构型设计模式,它允许通过在对象和其真实服务之间添加一个代理对象来控制对该对象的访问。代理对象充当了客户端和真实服务对象之间的中介,并提供了额外的功能,如远程访问、延迟加载、访问控制等。

代理模式的使用场景包括:

  1. 远程代理:当客户端和真实对象不在同一台机器上时,可以使用代理模式进行远程访问。
  2. 虚拟代理:当创建一个对象的开销很大时,可以使用代理模式延迟对象的实例化,直到真正需要使用它。
  3. 安全代理:代理对象可以控制对真实对象的访问权限,以提供安全性。
  4. 缓存代理:代理对象可以缓存真实对象的结果,以提高性能。

代理模式通常涉及以下角色:

  1. 抽象对象(Subject):定义了真实对象和代理对象共同实现的接口。它可以是一个抽象类或接口。
  2. 真实对象(Real Subject):实现了抽象对象定义的接口,是代理对象所代表的真实实体。
  3. 代理对象(Proxy):实现了抽象对象定义的接口,并包含一个引用指向真实对象。代理对象可以在调用真实对象之前或之后执行额外的操作。

java代码实例

抽象对象

public interface ATM {void opreation();}

真实对象

public class DrawBusiness implements ATM {@Overridepublic void opreation() {System.out.println("Withdraw some money!");}
}

代理对象

/*** 代理类,实现业务方法增强*/
public class Proxy_ implements ATM {private DrawBusiness drawBusiness;public Proxy_() {this.drawBusiness = new DrawBusiness();}@Overridepublic void opreation() {System.out.println("Please inter passWorld!");drawBusiness.opreation();System.out.println("Please take your card!");}
}

客户端

/*** 实现一个代理模式* 实现取钱的功能增强,取钱前输入密码,取钱后取出卡片*/
public class Proxy {public static void main(String[] args) {Proxy_ proxy_ = new Proxy_();proxy_.opreation();}}

输出结果

Please inter passWorld!
Withdraw some money!
Please take your card!

代理模式的优缺点

代理模式的优点包括:

  1. 通过代理对象,可以保护真实对象的访问,提供额外的安全性和控制。
  2. 代理对象可以在调用真实对象之前或之后执行其他逻辑,增加了灵活性。
  3. 可以实现对真实对象的延迟加载,提高了系统的性能。

代理模式也有一些缺点:

  1. 增加了系统的复杂性,因为涉及到了多个对象的交互。
  2. 可能会降低系统的性能,尤其是在使用远程代理时。
    代理模式是一种强大的设计模式,可以提供额外的功能,并控制对对象的访问。它在许多实际开发中都得到了广泛的应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/30187.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python爬虫——selenium的安装和基本使用

1.什么是selenium? selenium是一个用于web应用程序测试的工具selenium测试直接运行在浏览器中,就像真正的用户在操作一样支持通过各种driver(FrifoxDriver,ItenrentExploreDriver,OperaDriver,ChromeDrive…

【BASH】回顾与知识点梳理(十四)

【BASH】回顾与知识点梳理 十四 十四. 文件与目录的默认权限与隐藏权限14.1 文件预设权限:umaskumask 的利用与重要性:专题制作 14.2 文件隐藏属性chattr (配置文件案隐藏属性)lsattr (显示文件隐藏属性) 14.3 文件特殊权限: SUID, SGID, SBI…

了解华为(H3C)网络设备和OSI模型基本概念

目录 一,认识华为 1.华为发展史 2.华为网络设备介绍 3.VRP概述 二,OSI七层模型 1.七层模型详细表格 2.各层的作用 3.数据在各层之间的传递过程 4.OSI四层网络模型 一,认识华为 官网:https://www.huawei.com/cn/ 1.华为发…

从‘深林’到潮鞋App:得物如何改变电商格局”

在App Store上搜索下载得物App,惊奇发现其下载量达到百万级别,媲美同期京东App的下载量。 这是一个不小的数据体量,对此我产生了极大的好奇:“在淘宝系、京东、唯品会等电商巨头林立的现状下,单依靠潮鞋的得物凭什么能…

详解配置交换机多生成树MSTP+VRRP 的典型组网

详解配置交换机多生成树MSTPVRRP 的典型组网 组网: 1. 这是一个由三台交换机组成的倒三角型二层交换网络;网络中有4个VLAN:10、20、30、40;接口编号如图所示;SW3为接入层交换机,SW1、SW2为汇聚层交换机&am…

bash: make: command not found

make之后报错信息如下:cd 对应的文件路径后 make 发现报错:bash: make: command not found 这个原因可能是没有安装make工具,也可能是安装了make之后,没有将make的文件路径添加到系统环境变量中 有没有安装make,可以使用Search Everything搜索是否有make…

Spark官方调优三部曲之二:内存调优

前言 这里再次强调一遍,spark性能调优最重要的只有两个: 数据序列化内存调优上一篇博客已经详细介绍了数据序列化性能调优,本文主要针对内存调优进行讲解。 说白了就是减少数据对内存的占用 内存调优概述 调整内存使用时有三个考虑因素:对象使用的内存量(您可能希望整个…

websocket+node实现直播(弱鸡版)

心血历程 这部分主要是写在写这些的时候遇到的问题以及换思路的过程,可以之间看正文 在之前我也写过直播功能,并且与websocket相结合实现了直播弹幕。只不过直播是使用的腾讯云的,而不是手写的直播推流拉流,这次又有一个新的项目…

“深入解析JVM内部机制:理解Java虚拟机的工作原理“

标题:深入解析JVM内部机制:理解Java虚拟机的工作原理 摘要:本文将深入探讨Java虚拟机(JVM)的内部机制,解释其工作原理。我们将讨论JVM的组成部分、类加载过程、运行时数据区域以及垃圾回收机制。此外&…

【D3S】集成smart-doc并同步配置到Torna

目录 一、引言二、maven插件三、smart-doc.json配置四、smart-doc-maven-plugin相关命令五、推送文档到Torna六、通过Maven Profile简化构建 一、引言 D3S(DDD with SpringBoot)为本作者使用DDD过程中开发的框架,目前已可公开查看源码&#…

自从学了C++之后,小雅兰就有对象了!!!(类与对象)(中)——“C++”

各位CSDN的uu们好呀,好久没有更新小雅兰的C专栏啦,话不多说,让我们进入类和对象的世界吧!!! 类的6个默认成员函数 构造函数 析构函数 拷贝构造函数 类的6个默认成员函数 如果一个类中什么成员都没有&am…

el-select与el-tree结合使用,实现select框下拉使用树形结构选择数据

使用el-select与el-tree&#xff0c;实现如下效果&#xff0c; 代码如下&#xff1a; 注意点&#xff1a;搜索input框的代码一点放在option上面&#xff0c;不要放在option里面&#xff0c;否则一点击搜索框&#xff0c;下拉框就会收起来&#xff0c;不能使用。 <el-select…

【深度学习注意力机制系列】—— SKNet注意力机制(附pytorch实现)

SKNet&#xff08;Selective Kernel Network&#xff09;是一种用于图像分类和目标检测任务的深度神经网络架构&#xff0c;其核心创新是引入了选择性的多尺度卷积核&#xff08;Selective Kernel&#xff09;以及一种新颖的注意力机制&#xff0c;从而在不增加网络复杂性的情况…

工业无线技术应用-无线控制斗轮机启停、故障等开关信号

斗轮堆取料机是一种对散料进行连续堆取作业的高效装卸大型机械,被广泛使用于火力发电厂和炼焦厂的输煤系统中。目前对斗轮机的技改主要为将斗轮机的部分程控信号改为无线传输&#xff0c;取代卷筒电机和电缆的应用。 多数情况下都是利用无线通讯做媒介&#xff0c;让工作人员通…

NestJs 的 项目配置 学习

应用程序通常运行在不同的环境中。根据环境的不同&#xff0c;应使用不同的配置设置。例如&#xff0c;通常本地环境依赖于特定的数据库凭据&#xff0c;仅对本地数据库实例有效。生产环境将使用一组单独的数据库凭据。由于配置变量发生变化&#xff0c;最佳实践是将配置变量存…

第48节:cesium 面交集计算(含源码+视频)

结果示例: 完整源码: <template><div class="viewer"><vc-viewer @ready="ready" :logo="false"><vc-navigation

docker版jxTMS使用指南:使用jxTMS采集数据之一

本文讲解了如何jxTMS的数据采集与处理框架并介绍了如何用来采集数据&#xff0c;整个系列的文章请查看&#xff1a;docker版jxTMS使用指南&#xff1a;4.4版升级内容 docker版本的使用&#xff0c;请查看&#xff1a;docker版jxTMS使用指南 4.0版jxTMS的说明&#xff0c;请查…

Unity之ShaderGraph 节点介绍 Utility节点

Utility 逻辑All&#xff08;所有分量都不为零&#xff0c;返回 true&#xff09;Any&#xff08;任何分量不为零&#xff0c;返回 true&#xff09;And&#xff08;A 和 B 均为 true&#xff09;Branch&#xff08;动态分支&#xff09;Comparison&#xff08;两个输入值 A 和…

15 款最佳建筑渲染软件,适用于 Windows、macOS,免费和付费版本

3D 建模和渲染在建筑行业的各种项目的推广和营销中发挥着非常重要的作用。建筑公司使用 3D 建模和渲染、3D 建筑动画和演练来展示他们的设计。房地产效果图帮助代理商让客户清楚地了解建筑设计、纹理、灯光效果和环境情况。这是非常有价值的&#xff0c;并且在销售设计时提供了…

uniapp封装手写签名

组件代码 cat-signature <template><view v-if"visibleSync" class"cat-signature" :class"{visible:show}" touchmove.stop.prevent"moveHandle"><view class"mask" tap"close" /><view c…