设计模式十三:代理(Proxy Pattern)
代理模式是一种结构型设计模式,它允许通过在对象和其真实服务之间添加一个代理对象来控制对该对象的访问。代理对象充当了客户端和真实服务对象之间的中介,并提供了额外的功能,如远程访问、延迟加载、访问控制等。
代理模式的使用场景包括:
- 远程代理:当客户端和真实对象不在同一台机器上时,可以使用代理模式进行远程访问。
- 虚拟代理:当创建一个对象的开销很大时,可以使用代理模式延迟对象的实例化,直到真正需要使用它。
- 安全代理:代理对象可以控制对真实对象的访问权限,以提供安全性。
- 缓存代理:代理对象可以缓存真实对象的结果,以提高性能。
代理模式通常涉及以下角色:
- 抽象对象(Subject):定义了真实对象和代理对象共同实现的接口。它可以是一个抽象类或接口。
- 真实对象(Real Subject):实现了抽象对象定义的接口,是代理对象所代表的真实实体。
- 代理对象(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!
代理模式的优缺点
代理模式的优点包括:
- 通过代理对象,可以保护真实对象的访问,提供额外的安全性和控制。
- 代理对象可以在调用真实对象之前或之后执行其他逻辑,增加了灵活性。
- 可以实现对真实对象的延迟加载,提高了系统的性能。
代理模式也有一些缺点:
- 增加了系统的复杂性,因为涉及到了多个对象的交互。
- 可能会降低系统的性能,尤其是在使用远程代理时。
代理模式是一种强大的设计模式,可以提供额外的功能,并控制对对象的访问。它在许多实际开发中都得到了广泛的应用。
相关文章:
设计模式十三:代理(Proxy Pattern)
代理模式是一种结构型设计模式,它允许通过在对象和其真实服务之间添加一个代理对象来控制对该对象的访问。代理对象充当了客户端和真实服务对象之间的中介,并提供了额外的功能,如远程访问、延迟加载、访问控制等。 代理模式的使用场景包括&a…...

Redis基础 (三十八)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、概述 1.1 NoSQL 1.2 Redis 二、安装 2.1 安装方式 : 三、目录结构 3.1 rpm -ql redis 3.2 /etc/redis.conf 主配置文件 3.3 /var/lib/redis …...
maven中的scope
1、compile:默认值,可省略不写。此值表示该依赖需要参与到项目的编译、测试以及运行周期中,打包时也要包含进去。 2、test:该依赖仅仅参与测试相关的工作,包括测试代码的编译和执行,不会被打包,…...

【网络基础实战之路】实现RIP协议与OSPF协议间路由交流的实战详解
系列文章传送门: 【网络基础实战之路】设计网络划分的实战详解 【网络基础实战之路】一文弄懂TCP的三次握手与四次断开 【网络基础实战之路】基于MGRE多点协议的实战详解 【网络基础实战之路】基于OSPF协议建立两个MGRE网络的实验详解 PS:本要求基于…...

CNN(四):ResNet与DenseNet结合--DPN
🍨 本文为🔗365天深度学习训练营中的学习记录博客🍖 原作者:K同学啊|接辅导、项目定制 前面实现了ResNet和DenseNet的算法,了解了它们有各自的特点: ResNet:通过建立前面层与后面层之间的“短路…...

汽车EBSE测试流程分析(四):反思证据及当前问题解决
EBSE专题连载共分为“五个”篇章。此文为该连载系列的“第四”篇章,在之前的“篇章(三)”中已经结合具体研究实践阐述了“步骤二,通过系统调研确定改进方案”等内容。那么,在本篇章(四)中&#…...

如何在Spring MVC中使用@ControllerAdvice创建全局异常处理器
文章目录 前言一、认识注解:RestControllerAdvice和ExceptionHandler二、使用步骤1、封装统一返回结果类2、自定义异常类封装3、定义全局异常处理类4、测试 总结 前言 全局异常处理器是一种 🌟✨机制,用于处理应用程序中发生的异常ÿ…...

2023/08/05【网络课程总结】
1. 查看git拉取记录 git reflog --dateiso|grep pull2. TCP/IP和OSI七层参考模型 3. DNS域名解析 4. 预检请求OPTIONS 5. 渲染进程的回流(reflow)和重绘(repaint) 6. V8解析JavaScript 7. CDN负载均衡的简单理解 8. 重学Ajax 重学Ajax满神 9. 对于XML的理解 大白话叙述XML是…...
log_softmax比softmax更好?
多类别分类的一个trick 探讨一下在多类别分类场景,如翻译、生成、目标检测等场景下,使用log_softmax的效果优于softmax的原因。 假设词典大小为10,一个词的ID为9(即词典的最后一个词),使用交叉熵作为损失函…...

[LeetCode - Python]344.反转字符串(Easy);345. 反转字符串中的元音字母(Easy);977. 有序数组的平方(Easy)
1.题目 344.反转字符串(Easy) 1.代码 class Solution:def reverseString(self, s: List[str]) -> None:"""Do not return anything, modify s in-place instead."""# 双指针left,right 0, len(s)-1while left < right:temp s[left]s[…...

【SOP】最佳实践之 TiDB 业务写变慢分析
作者: 李文杰_Jellybean 原文来源: https://tidb.net/blog/d3d4465f 前言 在日常业务使用或运维管理 TiDB 的过程中,每个开发人员或数据库管理员都或多或少遇到过 SQL 变慢的问题。这类问题大部分情况下都具有一定的规律可循,…...
带有参数的 PL/SQL 过程/函数从选择查询返回表
技术标签: 【中文标题】带有参数的 PL/SQL 过程/函数从选择查询返回表【英文标题】:PL/SQL Procedure/function with params to return a table from(of) a select query【发布时间】:2020-12-01 11:17:49【问题描述】: 如何创建带参数的 (…...

文件的权限
1、修改文件的所属者和所属组 2、修改文件某一类人(所属者、所属组、其他人)的权限 一、用户对于普通文件的权限 二、用户对于目录文件的权限 三、访问控制列表ACL 四、特殊权限(了解) wuneng创建了几个文件,xiaoming对…...
vue3集成echarts最佳实践
安装 echarts npm install echarts --save 两种引用方式 非虚拟 dom import * as echarts from echarts;var chartDom document.getElementById(mychart); var myChart echarts.init(chartDom); var option;option {title: {text: Referer of a Website,subtext: Fake Da…...

一位年薪40W的测试被开除,回怼的一番话,令人沉思
一位年薪40W测试工程师被开除回怼道:“反正我有技术,在哪不一样” 一技傍身,万事不愁,当我们掌握了一技之长后,在职场上说话就硬气了许多,不用担心被炒,反过来还可以炒了老板,这一点…...

网络适配器和MAC地址
点对点信道:由于目的地只有一个选项,所以数据链路层不需要使用地址。 而在广播信道中: 各个主机如何判断信号是不是发给自己的? 当多个主机连接在同一个广播信道上,要想实现两个主机之间的通信,则每个主机都…...
react-player静音不能自动播放问题
现象 移动端不能自动播放 原因 取决于您使用的浏览器,但muted如果您不想与autoplay用户交互,则必须使用视频。 Chrome 的自动播放策略很简单: 始终允许静音自动播放。在以下情况下允许自动播放声音: 用户与域进行了交互&#x…...

培训Java技术要多久才能学会?答案都在这里啦
培训Java技术要多久才能学会?这是想学习Java开发的很多人都会问到的一个问题。而这个问题的答案其实并不是那么简单,因为学Java的时间长短受到众多因素的影响。本文将从个人基础、学习动力和学习效率三个方面来为您解答这个问题。 1. 个人基础 自己的基础对于学习…...
Java中使用HttpPost发送form格式的请求
在Java中使用HttpPost发送form格式的请求,可以使用Apache HttpClient库来实现。以下是一个示例代码: import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client…...

C语言----字节对齐
一:字节对齐的概念 针对字节对齐,百度百科的解释如下: 字节对齐是字节按照一定规则在空间上排列,字节(Byte)是计算机信息技术用于计量存储容量和传输容量的一种计量单位,一个字节等于8位二进制数,在UTF-8编…...
虚拟主机都有哪些应用场景?
虚拟主机作为一种高效的网络托管方案,已经逐渐成为企业构建网站和应用软件的重要选择,下面,小编将为大家介绍一下虚拟主机的应用场景都有哪些吧! 虚拟主机可以帮助企业建立属于自己的企业网站,是用来展示公司形象和服务…...
C++ 信息学奥赛总复习题
第一章 C 基础语法 一、填空题 C 源文件的扩展名通常是______。C 程序的入口函数是______。在 C 中,注释有两种形式,分别是______和______。声明一个整型变量 a 的语句是______。输出语句的关键字是______。 二、判断题 C 区分大小写。( …...
Android 视图系统入门指南
1. View:界面的最小单位 本质:屏幕上的一个矩形区域,能显示内容或接收触摸。比喻:就像乐高积木,是组成界面的最小单位。常见子类: TextView(文字积木)、Button(按钮积木…...
【LeetCode】3170. 删除星号以后字典序最小的字符串(贪心 | 优先队列)
LeetCode 3170. 删除星号以后字典序最小的字符串(中等) 题目描述解题思路java代码 题目描述 题目链接:3170. 删除星号以后字典序最小的字符串 给你一个字符串 s 。它可能包含任意数量的 * 字符。你的任务是删除所有的 * 字符。 当字符串还…...
VSCode主题定制:CSS个性化你的编程世界
在今天的数字世界,编程环境已成为开发者的第二大脑,而主题正是个性化你的创意空间的关键。本文将指导你如何使用CSS自定义VSCode的主题,让你的IDE不仅功能强大,更具视觉个性。 思路分析 设计思路: 创建主色调基调和…...
DHCP 动态主机配置协议(Dynamic host configuration protocol)逐层封装过程: DHCP --> UDP --> IP
📦 DHCP 报文逐层封装结构(自上而下) 应用层(DHCP 报文) ↓ 传输层(UDP 首部) ↓ 网络层(IP 首部) ↓ 数据链路层(以太网帧头) ↓ 物理层&#x…...
SQL 基础入门
SQL 基础入门 SQL(全称 Structured Query Language,结构化查询语言)是用于操作关系型数据库的标准语言,主要用于数据的查询、新增、修改和删除。本文面向初学者,介绍 SQL 的基础概念和核心操作。 1. 常见的 SQL 数据…...
MS358A 低功耗运算放大器 车规
MS358A 低功耗运算放大器 车规 产品简述 MS358A 是双通道运算放大器,具有低功耗、宽电源电压范围、高单位增益带宽的特性。在特定情况下,压摆率可以达到0.4V/μs 。每个通道的静态电流 (5V) 只有 430μA 。 MS358A输入共模范围可以到地,同时…...

Kafka入门-消费者
消费者 Kafka消费方式:采用pull(拉)的方式,消费者从broker中主动拉去数据。使用pull的好处就是消费者可以根据自身需求,进行拉取数据,但是坏处就是如果Kafka没有数据,那么消费者可能会陷入循环…...

思尔芯携手Andes晶心科技,加速先进RISC-V 芯片开发
在RISC-V生态快速发展和应用场景不断拓展的背景下,芯片设计正面临前所未有的复杂度挑战。近日,RISC-V处理器核领先厂商Andes晶心科技与思尔芯(S2C)达成重要合作,其双核单集群AX45MPV处理器已在思尔芯最新一代原型验证系…...