当前位置: 首页 > news >正文

java----------->代理模式

目录

什么是代理模式?

为什么会有代理模式?

怎么写代理模式?

实现代理模式总共需要三步:


什么是代理模式?

代理模式:给目标对象提供一个代理对象,并且由代理对象控制目标对象的引用

代理就是不允许用户访问当前核心类


为什么会有代理模式?

假设有一个类,类中写一个转账的方法:

zhuanzhang(nameA, nameB, money)

此时,一个test类就就可以直接访问该方法,这时有很多安全漏洞:a,b,name都没有经过验证就直接执行程序,完全没有考虑过a,b是否存在,money是否足够的问题

而如果把对参数的验证写到转账方法所在的类中,转账的核心方法可能就不是转账而是验证,而且代码的更改很难做到

因为当原有的写好的逻辑当中,需要增加新的功能时,由于当前整个逻辑是通顺的,不能轻易改动代码,此时,就需要代理模式解决该问题,还能够增强原有的逻辑功能

所以,代理对象相当于用户与核心方法之间的一个中介


怎么写代理模式?

如上面的例子,若转账类生成转账对象,又有代理类生成代理对象,

由代理对象控制对转账对象的引用,而此时用户在调用过程中能调用的方法都是代理方法,能看到的对象都是代理对象,

也就是说,目标对象/核心方法不对外提供引用

实现代理模式总共需要三步:
  1. 代理类实现对目标类的引用
  2. 知道目标类的核心方法是什么
  3. 调用目标类的核心方法

1.代理类如何控制目标类的引用?

就是去创建对象

一般情况下代理对象也要设置成private

用户不被允许访问当前的转账方法

2.怎样知道目标类的核心方法是什么?

可以利用反射

Proxy.newProxyInstance(o.getClass().getClassLoader(), 
o.getClass().getInterfaces(),h:this);//此时,o表示Object类型参数变量
//o.getClass().getClassLoader()  获取目标类的构造器
//o.getClass().getInterfaces()   获取目标类实现的接口

3.怎么调用目标类的核心方法?

只要在代理对象中写一个方法,该方法调用目标方法

对于用户来说,就像是直接调用了目标对象,

对于代理对象来说,实际上是调用了当前目标对象的类

当用户类去创建代理对象时,代理对象中就创建好了目标对象

通过method.invoke()调用核心方法(该方法为method包中自带),如图:


代理模式的核心功能

  1. 通过代理对象间接访问目标对象,通过防止用户直接访问目标对象,给系统带来不必要的复杂        性,即直接调用转账对象里的方法就有可能会出现前文所说的风险
  2. 通过代理业务对原有业务进行增强

代理模式分类

代理模式分为静态代理动态代理

静态代理和动态代理的一大区别在于代理类和代理对象的关系

如图:

静态代理:

  • 优点:实现起来较简单,易于理解和维护。
  • 缺点:代理类需要为每个接口都进行单独实现,如果接口方法发生变化,代理类也需要相应地修改,可扩展性较差。

且静态代理严格意义上不算代理

动态代理:

动态代理有两种实现方式:

<1>jdk                <2>cglib

这篇只介绍jdk

如何实现动态代理中代理类对代理对象一对多而代理对象对目标对象一对一的情况?

答:Object

在代理对象的方法中添加一个Object类型参数,参数对应要调用的目标方法即可实现

但其知道目标对象是什么,但是不知道目标对象里的方法是什么

如果使用接口并直接在接口后面添加方法名,此时破坏了开闭原则

此时就需要利用反射知道目标的核心方法

补:
 

是构建对象的模板,先必须创建出类来,才能把对象给创建出来

接口(Interface) 是一种抽象类型,是抽象方法的集合。一个类通过实现接口的方式,从而继承接口的抽象方法。接口的定义方式与类相似,但它们属于不同的概念。接口不能被实例化,但可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。

对于代理模式的使用,常见的有,远程代理、虚拟代理、保护代理等等

相关文章:

java----------->代理模式

目录 什么是代理模式&#xff1f; 为什么会有代理模式&#xff1f; 怎么写代理模式&#xff1f; 实现代理模式总共需要三步&#xff1a; 什么是代理模式&#xff1f; 代理模式&#xff1a;给目标对象提供一个代理对象&#xff0c;并且由代理对象控制目标对象的引用 代理就是…...

Wpf学习片段

IRegionManager 和IContainerExtension IRegionManager 是 Prism 框架中用于管理 UI 区域&#xff08;Regions&#xff09;的核心接口&#xff0c;它实现了模块化应用中视图&#xff08;Views&#xff09;的动态加载、导航和生命周期管理。 IContainerExtension 是依赖注入&…...

智能手表测试用例文档

智能手表测试用例文档 产品名称&#xff1a;智能手表 A1 版本号&#xff1a;FW v1.0.0 测试负责人&#xff1a;[填写] 编写时间&#xff1a;2025-xx-xx 文档状态&#xff1a;初次版本 &#x1f4c1; 测试用例结构说明 字段描述用例编号测试用例唯一编号&#xff0c;如 TC-FUN…...

密码学--希尔密码

一、实验目的 1、通过实现简单的古典密码算法&#xff0c;理解密码学的相关概念 2、理解明文、密文、加密密钥、解密密钥、加密算法、解密算法、流密码与分组密码等。 二、实验内容 1、题目内容描述 ①定义分组字符长度 ②随机生成加密密钥&#xff0c;并验证密钥的可行性 …...

配置Hadoop集群-集群配置

以下是 Hadoop 集群的核心配置步骤&#xff0c;基于之前的免密登录和文件同步基础&#xff0c;完成 Hadoop 分布式环境的搭建&#xff1a; 1. 集群规划 假设集群包含 3 个节点&#xff1a; master&#xff1a;NameNode、ResourceManagerslave1&#xff1a;DataNode、NodeMana…...

第三方软件测评中心分享:软件功能测试类型和测试工具

在数字化时代&#xff0c;软件测试已成为确保产品质量的重要环节。功能测试作为软件测试中的核心部分&#xff0c;关注于软件产品是否按预期功能正常运作。 软件功能测试可以按不同的方式进行分类&#xff0c;主要包括以下几种类型&#xff1a;   1.正功能测试&#xff1a;验…...

Profibus DP主站与Modbus RTU/TCP网关与海仕达变频器轻松实现数据交互

Profibus DP主站与Modbus RTU/TCP网关与海仕达变频器轻松实现数据交互 Profibus DP主站转Modbus RTU/TCP&#xff08;XD-MDPBm20&#xff09;网关在Profibus总线侧实现主站功能&#xff0c;在Modbus串口侧实现从站功能。可将ProfibusDP协议的设备&#xff08;如&#xff1a;海…...

多视角系统,视角之间的切换,输入操作。无人机Pawn视角的实现

一.创建自己的PlayerController。它相当于是灵魂&#xff0c;穿梭在不同Pawn之间。也即是切换视角。不同输入的响应也写在这里。这样即使&#xff0c;都有鼠标操作&#xff0c;也能区分。避免了代码的重复耦合。也可以叫做视角系统。 class LZJGAMEMODE_API ALZJPlayerControl…...

[学习]RTKLib详解:ionex.c、options.c与preceph.c

RTKLib详解&#xff1a;ionex.c、options.c与preceph.c 本文是 RTKLlib详解 系列文章的一篇&#xff0c;目前该系列文章还在持续总结写作中&#xff0c;以发表的如下&#xff0c;有兴趣的可以翻阅。 [学习] RTKlib详解&#xff1a;功能、工具与源码结构解析 [学习]RTKLib详解&…...

【Linux笔记】——进程信号的保存

&#x1f525;个人主页&#x1f525;&#xff1a;孤寂大仙V &#x1f308;收录专栏&#x1f308;&#xff1a;Linux &#x1f339;往期回顾&#x1f339;&#xff1a;【Linux笔记】——进程信号的产生 &#x1f516;流水不争&#xff0c;争的是滔滔不 一、信号的相关概念二、信…...

教育机构教务管理系统哪个好?

在当今教育培训行业快速发展的背景下&#xff0c;一个高效、专业的教务管理系统已成为教育机构提升运营效率、优化教学质量的关键工具。本文将深入分析爱耕云教务管理系统的核心优势&#xff0c;通过具体功能解析和代码示例展示其技术实现方式&#xff0c;并对比市场上其他主流…...

ZYNQ笔记(二十):Clocking Wizard 动态配置

版本&#xff1a;Vivado2020.2&#xff08;Vitis&#xff09; 任务&#xff1a;ZYNQ PS端 通过 AXI4Lite 接口配置 Clocking Wizard IP核输出时钟频率 目录 一、介绍 二、寄存器定义 三、配置 四、PS端代码 一、介绍 Xilinx 的 Clock Wizard IP核 用于在 FPGA 中生成和管理…...

电商平台一站式网络安全架构设计指南

摘要&#xff1a;据 Gartner 统计&#xff0c;采用一体化安全方案的电商企业数据泄露成本降低 67%。本文从攻击链分析到防御体系构建&#xff0c;详解如何实现网络层、应用层、数据层的协同防护。 一、电商安全威胁全景图&#xff08;2024 攻击态势&#xff09; 1.1 攻击者完…...

烟花爆竹储存需要注意哪些问题

烟花爆竹储存需要注意哪些问题 烟花爆竹作为易燃易爆物品&#xff0c;其储存安全至关重要。不当的储存方式不仅可能导致产品失效&#xff0c;更可能引发火灾、爆炸等严重事故。以下是烟花爆竹储存需要注意的几个关键问题&#xff1a; 一、储存场所选择 必须选择专用仓库储存…...

C++11详解

文章目录 前言一、列表初始化1.1 {} 初始化1.2 initializer_list 类型 三、声明3.1 auto3.2 decltype 四、右值引用和移动语义4.1 左值引用和右值引用4.2 移动语义 五、可变参数模板六、lambda表达式各部分详细解释示例代码代码解释 七、包装器八、bind注意事项 前言 C11在系统…...

VLM-RL:用于安全自动驾驶的统一视觉语言模型和强化学习框架——论文阅读

《VLM-RL: A Unified Vision Language Models and Reinforcement Learning Framework for Safe Autonomous Driving》2024年12月发表&#xff0c;来自Wisconsin Madison分校和Purdue大学的论文。 近年来&#xff0c;基于强化学习&#xff08;RL&#xff09;的学习驾驶策略的方法…...

新手安装java所有工具(jdk、idea,Maven,数据库)

新手安装JAVA工具 介绍JDK11IDEA 2025.1Maven数据库&#xff08;Navicat Premium Lite&#xff09; 介绍 涉及安装JAVA所需的各种工具 JDK&#xff08;以JDK11为例&#xff09;IDEA&#xff08;以2025.1为例&#xff09;Maven&#xff08;以3.8.8为例&#xff09;数据库&…...

hive在配置文件中添加了hive.metastore.uris之后进入hive输入命令报错

在hive-site.xml文件中加入配置hive.metastore.uris启动hive后报错 <property><name>hive.metastore.uris</name><value>thrift://node154:9083</value></property> 加完属性就需要手动启动metastore服务&#xff0c;因为不使用 Zookeepe…...

Hive原理

Hive 是构建在 Hadoop 上的数据仓库工具,其核心原理是通过类 SQL 语言(HiveQL)将结构化数据查询转换为分布式计算任务(如 MapReduce、Tez、Spark),并利用 HDFS 存储数据。以下是 Hive 的核心原理和架构: 1. 核心设计思想‌ ‌数据仓库抽象‌:将 HDFS 上的文件抽象为‌…...

cursor 出现 unauthorized request

文档出自&#xff1a;https://www.kdocs.cn/l/csE3iuSauHoS...

uniapp|商品列表加入购物车实现抛物线动画效果、上下左右抛入、多端兼容(H5、APP、微信小程序)

以uniapp框架为基础,详细解析商品列表加入购物车抛物线动画的实现方案。通过动态获取商品点击位置与购物车坐标,结合CSS过渡动画模拟抛物线轨迹,实现从商品图到购物车图标的动态效果。 目录 核心实现原理坐标动态计算抛物线轨迹模拟​动画元素控制代码实现详解模板层设计脚本…...

点下4个Winform UI开源控件库

从零学习构建一个完整的系统 今天一起来盘点下4个Winform UI开源控件库&#xff0c;有.Net Framework&#xff0c;也有.Net Core。 1、支持.Net 7的开源UI组件框架 项目简介 这是一个基于.Net Framework、.Net 6开发的&#xff0c;WinForm开源UI框架&#xff0c;框架包含常…...

【AI】mcp server本质就是一个接口服务么

以下为元宝的回答&#xff1a; 你的理解非常准确&#xff01;​​MCP Server​​本质上是一个接口服务&#xff0c;但其设计目标、交互逻辑和使用场景与传统后端接口存在显著差异。以下是两者的对比分析&#xff1a; ​​1. 核心定位差异​​ ​​维度​​​​MCP Server​​…...

chalrs正常使用一段时间后开启代理访问网页 显示“不是私密链接”解决办法

chalrs正常使用一段时间后开启代理访问网页 显示“不是私密链接”解决办法 背景&#xff1a; charles用了好长时间了&#xff0c;最近发现打开charles有些软件无法上网&#xff0c;浏览器访问网页提示“您的连接不是私密链接”&#xff0c;按照网上的教程重装了几次证书&#x…...

如何通过DNS解析实现负载均衡?

在当今的互联网时代&#xff0c;随着网络应用的飞速发展&#xff0c;网站和各类在线服务面临着海量的用户请求。为了保障服务的高可用性和高性能&#xff0c;负载均衡技术应运而生。DNS&#xff08;域名系统&#xff09;负载均衡作为其中一种重要的实现方式&#xff0c;凭借其简…...

uni-app微信小程序登录流程详解

文章目录 uni-app微信小程序登录流程实战详解微信小程序登录流程概述1. 获取登录凭证&#xff08;code&#xff09;2. 发送登录请求3. 保存登录态4. 登录状态管理5. 应用登录状态请求拦截器中添加 token自动登录页面路由守卫 使用 Vuex 集中管理登录状态登录组件示例登录流程最…...

基于LVS和Keepalived实现高可用负载均衡架构

目录 一、资源清单 二、修改主机名 三、配置调度器 四、配置Web节点服务器&#xff08;web1、web2&#xff09; 五、测试负载均衡 六、测试LVSKeepalived高可用群集 一、资源清单 主机 操作系统 IP地址 lb01 OpenEuler24.03 192.168.16.142 lb02 OpenEuler24.03 …...

微信小程序仿淘宝拍照/照片点位识图、点位裁剪生图、图片裁剪组件、图片点位框选、裁剪生成图片,canvasToImg

实现效果 效果&#xff1a; 1.微信小程序仿淘宝拍照/照片点位识图、根据点位裁剪生图、图片可裁剪、图片高度可控 2.识别点位自动生成标准构图方案&#xff0c;支持手动微调实现像素级精准裁剪 3.可以根据接口识别的点位信息实现拍照/相册图片特征点自动识别并裁剪 实现步骤 …...

EnumUtils:你的枚举“变形金刚“——让枚举操作不再手工作业

各位枚举操控师们好&#xff01;今天要介绍的是Apache Commons Lang3中的EnumUtils工具类。这个工具就像枚举界的"瑞士军刀"&#xff0c;能让你的枚举操作从石器时代直接跃迁到星际文明&#xff01; 一、为什么需要EnumUtils&#xff1f; 手动操作枚举就像&#xf…...

在Taro中开发一个跨端Svg组件,同时支持小程序、H5、React Native

Taro系列中一直没有跨端的绘图工具&#xff0c;小程序端支持canvas但是不支持svg&#xff0c;RN端有 react-native-svg 支持svg&#xff0c;但是没有很好原生的canvas插件&#xff0c;社区的canvas都是基于WebView实现的&#xff0c;或者skia&#xff0c;这个插件的书写方式和c…...

大型视频学习平台项目问题解决笔记

一 数据库大量读操作导致数据库压力过大的解决方案 1. 优化SQL语句 2. 缓存 二 数据库大量写操作导致数据库压力过大的解决方案 1. 优化SQL语句 2. 改同步写为异步写——解决复杂事务的高并发写 3. 合并写请求——解决简单事务的高并发写&#xff08;额外实现一个异步操作来…...

day18-数据结构引言

一、 概述 数据结构&#xff1a;相互之间存在一种或多种特定关系的数据元素的集合。 1.1 特定关系&#xff1a; 1. 逻辑结构 2.物理结构&#xff08;在内存当中的存储关系&#xff09; 逻辑结构物理结构集合&#xff0c;所有数据在同一个集合中&#xff0c;关系平等顺…...

Android音频解码中的时钟同步问题:原理、挑战与解决方案

一、为什么音频同步如此重要&#xff1f; 在多媒体播放系统中&#xff0c;音频同步问题直接影响用户体验。根据行业研究数据&#xff1a; • 15ms以上的同步偏差&#xff1a;53%的用户能感知到音画不同步 • 超过100ms的偏差&#xff1a;会导致明显的"口型对不上"现…...

深入浅出 iOS 对象模型:isa 指针 与 Swift Metadata

在 iOS 开发中&#xff0c;我们经常听到两个看似神秘的词&#xff1a;isa 指针 和 Metadata。这两个概念分别源自 Objective-C 和 Swift 的对象系统&#xff0c;是我们理解底层运行机制、优化性能乃至调试疑难问题的关键。今天我们就来聊一聊&#xff0c;它们到底是什么&#x…...

ARMV8 RK3399 u-boot TPL启动流程分析 --crt0.S

上一篇介绍到start.S 最后一个指令是跳转到_main, 接下来分析 __main 都做了什么 arch/arm/lib/crt0.S __main 注释写的很详细&#xff0c;主要分为5步 1. 准备board_init_f的运行环境 2. 跳转到board_init_f 3. 设置broad_init_f 申请的stack 和 GD 4. 完整u-boot 执行re…...

Lynx-字节跳动跨平台框架多端兼容Android, iOS, Web 原生渲染

介绍 字节跳动近期开源的跨平台框架Lynx被视为一项重要的技术创新。相较于市场上已有的解决方案如React Native (RN) 和Flutter&#xff0c;Lynx具有独特的特性。 首先&#xff0c;Lynx采用轻量级JavaScript逻辑设计&#xff0c;DOM节点构建完全置于Native层&#xff0c;确保U…...

手机换地方ip地址会变化吗?深入解析

在移动互联网时代&#xff0c;我们经常带着手机穿梭于不同地点&#xff0c;无论是出差旅行还是日常通勤。许多用户都好奇&#xff1a;当手机更换使用地点时&#xff0c;IP地址会随之改变吗&#xff1f;本文将深入解析手机IP地址的变化机制&#xff0c;帮助您全面了解这一常见但…...

Linux——数据库备份与恢复

一&#xff0c;Mysql数据库备份概述 1&#xff0c;数据库备份的重要性 数据灾难恢复&#xff1a;数据库可能会因为各种原因出现故障&#xff0c;如硬件故障、软件错误、误操作、病毒攻击、自然灾害等。这些情况都可能导致数据丢失或损坏。如果有定期的备份&#xff0c;就可以…...

矩阵键盘模块

目录 1.矩阵键盘介绍 2.扫描的概念 数码管扫描&#xff08;输出扫描&#xff09; 矩阵键盘扫描&#xff08;输入扫描&#xff09; 矩阵按键采用逐行扫描&#xff1a; 3.矩阵键盘代码 第一步&#xff1a; 第二步&#xff1a; 第三步&#xff1a; 第四步&#xff1…...

连接词化归律详解

1. 连接词化归律的基本概念 连接词化归律(也称为归结原理)是数理逻辑中用于简化逻辑表达式的重要方法&#xff0c;它允许我们将复杂的逻辑表达式转化为更简单的等价形式&#xff0c;特别是转化为合取范式(CNF)或析取范式(DNF)。 核心思想 连接词化归律基于一系列逻辑等价关系…...

Ubuntu 18.04 iso文件下载

参考&#xff1a;https://blog.csdn.net/Li060703/article/details/106075597 Rufus 官网&#xff1a; https://rufus.ie/zh/ 镜像下载地址 阿里云镜像站&#xff1a;https://mirrors.aliyun.com/ubuntu-releases/18.04/ 网易镜像&#xff1a;http://mirrors.163.com/ub…...

【C#】ToArray的使用

在 C# 中&#xff0c;ToArray 方法通常用于将实现了 IEnumerable<T> 接口的集合&#xff08;如 List<T>&#xff09;转换为数组。这个方法是 LINQ 提供的一个扩展方法&#xff0c;位于 System.Linq 命名空间中。因此&#xff0c;在使用 ToArray 方法之前&#xff0…...

学习日志03 java

最近有点懈怠了&#xff0c;多多实践&#xff0c;多敲代码&#xff0c;多多专注&#xff01; 1 ArithmeticException ArithmeticException 是 Java 中的一个异常类&#xff0c;它继承自 RuntimeException&#xff0c;用于表示在算术运算中出现的错误。这个异常通常在以下情况…...

数据库故障排查指南

对于项目研发来讲&#xff0c;数据库是必不可少的一个重要环节&#xff0c;本文详细总结了项目研发中数据库故障问题排查指南&#xff0c;希望会对大家有所帮助。 数据库连接问题 检查数据库服务是否正常运行&#xff0c;确认网络连接是否畅通&#xff0c;验证数据库配置文件…...

洛谷 P1955 [NOI2015] 程序自动分析

【题目链接】 洛谷 P1955 [NOI2015] 程序自动分析 【题目考点】 1. 并查集 2. 离散化 【解题思路】 多组数据问题&#xff0c;对于每组数据&#xff0c;有多个 x i x j x_ix_j xi​xj​或 x i ≠ x j x_i \neq x_j xi​xj​的约束条件。 所有相等的变量构成一个集合&…...

音视频学习:使用NDK编译FFmpeg动态库

1. 环境 1.1 基础配置 NDK 22b (r22b)FFmpeg 4.4Ubuntu 22.04 1.2 下载ffmpeg 官网提供了 .tar.xz 包&#xff0c;可以直接下载解压&#xff1a; wget https://ffmpeg.org/releases/ffmpeg-4.4.tar.xz tar -xvf ffmpeg-4.4.tar.xz cd ffmpeg-4.41.3 安装基础工具链 sudo …...

OpenHarmony Linux内核本地管理

概述 写这篇文章的初衷&#xff0c;其实也是作者从事多年Android系统开发中&#xff0c;根深蒂固的目录情节导致的&#xff0c;再开发Harmony系统中&#xff0c;总是想模拟Android系统的开发思路。 对于OpenHarmony这个patch机制&#xff0c;其实我很讨厌它&#xff0c;虽然这样…...

2025最新出版 Microsoft Project由入门到精通(六)

目录 三种资源类型的分配方式 成本类资源的分配方式 第一步&#xff1a;切换视图为”任务分配状况“视图 第二步&#xff1a;选中任务→资源→分配资源&#xff0c;打开分配资源窗口选择资源单击”分配“ 资源成本的修改方式 ​编辑工时类资源的分配方式 工时类资源的…...

Tomcat服务部署

目录 一. Tomcat概述 1.1 什么是Tomcat 1.2 安装Tomcat 1.2.1 CentOS7 安装 1.2.2 ubuntu 安装 1.2.3 使用脚本快速安装 二. 配置文件及核心组件 2.1 配置文件 2.1.1 安装目录下文件介绍 2.1.2 conf子目录 2.2 组件 三. tomcat 处理请求过程 四. 常见配置详解 4.…...

Chrome更新到136以后selenium等自动化浏览器失效

Chrome更新到136以后&#xff0c;已经不再支持对默认浏览器数据文件夹进行自动化调试&#xff0c;从而导致selenium在指定user-data-dir为默认路径“C:\Users\{计算机名}\AppData\Local\Google\Chrome\User Data”会报错&#xff0c;相应地的selenium-wire&#xff0c;undetect…...