一些个人理解

顾名思义,就是代理一个对象。

那么,既然要代理一个东西,就要传入它吧?
【1】所以将代理对象当作属性【【2】往往通过构造方法传入被代理的目标对象】。

既然要代理,那必然要和代理对象拥有相同的功能吧?
所以实现了和代理对象相同的方法。【3】

那么我们怎么能实现同样的功能呢?
我们让他们实现同一个接口就行。【4】

但是如果我实现了功能,还要自己执行的话,岂不是这个代理反而和被代理的目标对象混为一谈,变成一个东西了吗?,
考虑到我们传入的被代理的目标对象,显然是通过这个传入的目标对象来执行功能【5】

一个例子

假如有个计算器接口,功能是简单的加减乘除。

【4,创建一个接口】
public interface MathCalculator {int div(int i, int j);int mul(int i, int j);int sub(int i, int j);int add(int i, int j);}
【接口的实现类,被代理的对象】
public class MathCalculatorImpl implements MathCalculator {@Overridepublic int div(int i, int j) {return 0;}@Overridepublic int mul(int i, int j) {return 0;}@Overridepublic int sub(int i, int j) {return 0;}@Overridepublic int add(int i, int j) {return i+j;}
}
【代理对象,和被代理对象一样,实现同一个接口】
public class CalculatorStaticProxy implements MathCalculator {private MathCalculator mathCalculator;//【1,将目标对象当作属性】// 【2】通过构造方法传入被代理的目标对象public CalculatorStaticProxy(MathCalculator mathCalculator) {this.mathCalculator = mathCalculator;}// 【3】要和代理对象拥有相同的功能@Overridepublic int div(int i, int j) {// 【5】,使用传入的目标对象来执行功能return this.mathCalculator.div(i,j);}@Overridepublic int mul(int i, int j) {// 【5】,使用传入的目标对象来执行功能return this.mathCalculator.mul(i,j);}@Overridepublic int sub(int i, int j) {// 【5】,使用传入的目标对象来执行功能return this.mathCalculator.sub(i,j);}@Overridepublic int add(int i, int j) {// 【5】,使用传入的目标对象来执行功能return this.mathCalculator.add(i,j);}
}
【测试静态代理】
public class MathCalTest {@Testpublic void test01() {MathCalculator mathCalculator = new MathCalculatorImpl();CalculatorStaticProxy calculatorStaticProxy = new CalculatorStaticProxy(mathCalculator);int add = calculatorStaticProxy.add(1, 1);System.out.println(add);}
}

附加说明

代理模式(Proxy)​,为其他对象提供一种代理以控制对这个对象的访问。
在这里插入图片描述
ISubject类,定义了RealSubject和Proxy的共用接口,这样就在任何使用RealSubject的地方都可以使用Proxy

RealSubject类,定义Proxy所代表的真实实体

Proxy类,保存一个引用使得代理可以访问实体,并提供与Subject的接口相同的方法,这样代理就可以用来替代实体

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

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

相关文章

牛津大学xDeepMind 自然语言处理(1)

牛津大学xDeepMind 自然语言处理 Natural Language Processing 词向量与词汇语义学 Word Vectors and Lexical Semantics 词语表示的基本问题与分布语义思想 传统词语表示(如独热向量)存在稀疏、正交、语义弱的问题,无法表达语义相似性。分布…

StarRocks数据库集群的完整部署流程

目录 依赖环境 下载安装包 部署FE 部署BE 搭建集群 停止集群 依赖环境 详见&#xff1a;StarRocks 部署&#xff1a;依赖环境-CSDN博客 下载安装包 在官方网站下载安装包&#xff1a;StarRocks 部署FE 创建元数据目录。 mkdir -p <meta_dir> 修改 FE 配置文件 f…

简单的 VSCode 设置

以下是我使用的vscode设置。虽然有些主观&#xff0c;但很实用。1 主题。我放弃了那些炫酷的主题。我选择了Tokyo Night (Storm)。理由是&#xff1a;它平静、赏心悦目&#xff0c;并且与代码形成了美丽的对比&#xff0c;却又不显得刺眼。2. 字体。我切换到了 JetBrains Mono …

Rust 条件语句

Rust 条件语句 在编程语言中&#xff0c;条件语句是程序流程控制的重要组成部分。Rust 作为一种系统编程语言&#xff0c;其条件语句的设计简洁而强大。本文将详细介绍 Rust 中的条件语句&#xff0c;包括其语法、用法以及一些高级特性。 1. 基本条件语句 Rust 中的基本条件语句…

【Java EE进阶 --- SpringBoot】初识Spring(创建SpringBoot项目)

乐观学习&#xff0c;乐观生活&#xff0c;才能不断前进啊&#xff01;&#xff01;&#xff01; 我的主页&#xff1a;optimistic_chen 我的专栏&#xff1a;c语言 &#xff0c;Java, Java EE初阶&#xff0c; Java数据结构 欢迎大家访问~ 创作不易&#xff0c;大佬们点赞鼓励…

脑潜在进展:基于潜扩散模型的三维脑磁共振成像个体时空疾病进展研究|文献速递-深度学习人工智能医疗图像

Title题目Brain Latent Progression: Individual-based spatiotemporal diseaseprogression on 3D Brain MRIs via latent diffusion脑潜在进展&#xff1a;基于潜扩散模型的三维脑磁共振成像个体时空疾病进展研究01文献速递介绍神经退行性疾病是现代医疗保健领域最紧迫的挑战之…

专题:2025AI技术应用与发展报告|附600+份报告PDF、数据仪表盘汇总下载

原文链接&#xff1a;https://tecdat.cn/?p43632 当企业管理者看着后台65%的任务被AI自动分配&#xff0c;却仍在为下周的营销方案熬夜改稿时&#xff0c;一个现实的矛盾浮出水面&#xff1a;AI到底能帮企业做什么&#xff1f; 2025年&#xff0c;算法研发投入占企业AI预算的…

【笔记】扩散模型(一一):Stable Diffusion XL 理论与实现

论文链接&#xff1a;SDXL: Improving Latent Diffusion Models for High-Resolution Image Synthesis 官方实现&#xff1a;Stability-AI/generative-models 非官方实现&#xff1a;huggingface/diffusers Stable Diffusion XL (SDXL) 是 Stablility AI 对 Stable Diffusion 进…

学习安卓APP开发,10年磨一剑,b4a/Android Studio

学习安卓APP开发 记得上次学APP都是在2016年前了&#xff0c;一晃就过去了10年。 当时用ANDROID studio打开一个空项目和编绎分别用了300秒&#xff0c;一下就用了10分钟。 后来买了一台一万多的电脑&#xff0c;CPU换成了I5 8600K 4.2GHZ*6核&#xff0c;再加上M2固态硬盘。 编…

调试技巧(vs2022 C语言)

调试之前首先要保证我们的脑袋是清晰的&#xff0c;我们调试的过程主要是看代码有没有按照我们的想法去运行调试最常使用的几个快捷键F5启动调试&#xff0c;经常用来直接跳到下一个断点处&#xff08;F5通常和F9配合使用&#xff0c;打了断点按F5程序可以直接运行到断点处&…

MySQL深度理解-Innodb底层原理

1.MySQL的内部组件结构大体来说&#xff0c;MySQL可以分为Server层和存储引擎层两部分。2.Server层Server层主要包括连接器、查询缓存、分析器、优化器和执行器等&#xff0c;涵盖MySQL的大多数核心服务功能&#xff0c;以及所有的内置函数&#xff08;如日期、时间、数据和加密…

QFtp在切换目录、上传文件、下载文件、删除文件等一系列操作时,如何按照预期操作指令顺序执行

FTP服务初始化时&#xff0c;考虑到重连、以及commandFinished信号信号执行完成置m_bCmdFinished 为true; void ICore::connectFtpServer() {if(g_pFile nullptr){g_pFile new QFile;}if(g_pFtp){g_pFtp->state();g_pFtp->abort();g_pFtp->deleteLater();g_pFtp n…

JavaSE高级-02

文章目录1. 多线程1.1 创建线程的三种方式多线程的创建方式一&#xff1a;继承Thread类多线程的创建方式二&#xff1a;实现Runnable接口多线程的创建方式三&#xff1a;实现Callable接口三种线程的创建方式对比Thread的常用方法1.2 线程安全线程同步方式一&#xff1a;同步代码…

从舒适度提升到能耗降低再到安全保障,楼宇自控作用关键

在现代建筑的发展历程中&#xff0c;楼宇自动化控制系统&#xff08;BAS&#xff09;已从单纯的设备管理工具演变为集舒适度优化、能耗控制与安全保障于一体的核心技术。随着物联网和人工智能的深度应用&#xff0c;楼宇自控系统正以数据为纽带&#xff0c;重构人与建筑的关系。…

图像分类精度评价的方法——误差矩阵、总体精度、用户精度、生产者精度、Kappa 系数

本文详细介绍 “图像分类精度评价的方法”。 图像分类后&#xff0c;需要评估分类结果的准确性&#xff0c;以判断分类器的性能和结果的可靠性。 常涉及到下面几个概念&#xff08;指标&#xff09; 误差矩阵、总体精度、用户精度、生产者精度和 Kappa 系数。1. 误差矩阵&#…

【科普向-第一篇】数字钥匙生态全景:手机厂商、车厂与协议之争

目录 一、协议标准之争&#xff1a;谁制定规则&#xff0c;谁掌控入口 1.1 ICCE&#xff1a;中国车企主导的自主防线 1.2 ICCOA&#xff1a;手机厂商的生态突围 1.3 CCC&#xff1a;国际巨头的高端壁垒 1.4 协议对比 二、底层技术路线&#xff1a;成本与安全的博弈 2.1B…

dockerfile及docker常用操作

1: docker 编写 Dockerfile 是用于构建 Docker 镜像的文本文件&#xff0c;包含一系列指令和参数&#xff0c;用于定义镜像的构建过程 以下是关键要点&#xff1a; 一、基本结构 ‌FROM‌&#xff1a;必须作为第一条指令&#xff0c;指定基础镜像&#xff08;如 FROM python:3.…

[vibe coding-lovable]lovable是不是ai界的复制忍者卡卡西?

在火影忍者的世界里&#xff0c;卡卡西也被称为复制忍者&#xff0c;因为大部分忍术都可以被其Copy! 截图提示:实现这个效果 -> 发给Lovalbe -> 生成的的效果如下&#xff0c;虽然不是1比1还原&#xff0c;但是这个效果也很惊艳。 这个交互设计&#xff0c;这个UI效果&am…

技术赋能安全:智慧工地构建城市建设新防线

城市建设的热潮中&#xff0c;工地安全始终是关乎生命与发展的核心议题。江西新余火灾等事故的沉痛教训&#xff0c;暴露了传统工地监管的诸多短板——流动焊机“行踪难觅”&#xff0c;无证动火作业屡禁不止&#xff0c;每一次监管缺位都可能引发灾难性后果。如今&#xff0c;…

Sublime Text 代码编辑器(Mac中文)

原文地址&#xff1a;Sublime Text Mac 代码编辑器 sublime text Mac一款轻量级的文本编辑器&#xff0c;拥有丰富的功能和插件。 它支持多种编程语言&#xff0c;包括C、Java、Python、Ruby等&#xff0c;可以帮助程序员快速编写代码。 Sublime Text的界面简洁、美观&#…