JAVA:代理模式(Proxy Pattern)的技术指南

1、简述

代理模式(Proxy Pattern)是一种结构型设计模式,用于为其他对象提供一种代理,以控制对这个对象的访问。通过代理模式,我们可以在不修改目标对象代码的情况下扩展功能,满足特定的需求。

在这里插入图片描述

设计模式样例:https://gitee.com/lhdxhl/design-pattern-example.git


2、什么是代理模式?

代理模式的核心思想是通过一个代理对象来间接访问目标对象,从而为目标对象增加额外的功能或限制。代理模式的常见用途包括:

  • 控制访问:限制对目标对象的直接访问。
  • 延迟加载:当对象的创建成本较高时,通过代理模式实现按需加载。
  • 增强功能:在目标对象的行为前后添加其他逻辑。

代理模式通常由以下几个角色组成:

  • 抽象主题(Subject):定义目标对象和代理对象的共同接口。
  • 真实主题(RealSubject):实现了抽象主题的真实对象。
  • 代理(Proxy):持有对真实主题的引用,并通过实现抽象主题接口来控制对真实主题的访问。

3、实际案例

3.1 实现静态代理

一个 UserService 提供用户的基本操作,我们通过代理实现日志记录功能。

// 接口定义
public interface UserService {
   
    void addUser(String name);
}

// 目标类
public class UserServiceImpl implements UserService {
   
    @Override
    public void addUser(String name) {
   
        System.out.println("User added: " + name);
    }
}

// 代理类
public class UserServiceProxy implements UserService {
   
    private final UserService userService;

    public UserServiceProxy(UserService userService) {
   
        this.userService = userService;
    }

    @Override
    public void addUser(String name) {
   
        System.out.println("[LOG] Adding user...");
        userService.addUser(name);
        System.out.println("[LOG] User added.")

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

3D Gaussian Splatting for Real-Time Radiance Field Rendering-简洁版

1. 研究背景与问题 传统的3D场景表示方法,如网格和点云,适合GPU加速的光栅化操作,但缺乏灵活性。而基于神经辐射场(NeRF)的表示方式,尽管质量高,但需要高成本的训练和渲染时间。此外&#xff0…

Unity性能优化---使用SpriteAtlas创建图集进行批次优化

在日常游戏开发中,UI是不可缺少的模块,而在UI中又使用着大量的图片,特别是2D游戏还有很多精灵图片存在,如果不加以处理,会导致很高的Batches,影响性能。 比如如下的例子: Batches是9&#xff0…

计算机网络知识点全梳理(三.TCP知识点总结)

目录 TCP基本概念 为什么需要TCP 什么是TCP 什么是TCP链接 如何唯一确定一个 TCP 连接 TCP三次握手 握手流程 为什么是三次握手,而不是两次、四次 为什么客户端和服务端的初始序列号 ISN 不同 既然 IP 层会分片,为什么 TCP 层还需要 MSS TCP四…

找出1000以内的所有回文数

找出1000以内的所有回文数 方法概述检查回文数的方法伪代码C代码实现代码解析运行结果在计算机科学中,回文数是一种具有对称性质的数,即从左向右读和从右向左读都是相同的。例如,121、1331、12321都是回文数。本文将利用数据结构、C语言和算法的知识来编写一个程序,找出100…

Go-FastDFS文件服务器一镜到底使用Docker安装

本文章介绍一镜到底安装go-fastdfs并配置数据文件到linux 由于国内镜像无法安装go-fastdfs:国内环境已经把docker官方的网站给封闭了 我们需要从国外的一台服务器,下载images镜像,然后进行转发加载到国内服务器 当然我也给你们准备了docke…

ArcGIS计算土地转移矩阵

在计算土地转移矩阵时,最常使用的方法就是在ArcGIS中将土地利用栅格数据转为矢量,然后采用叠加分析计算,但这种方法计算效率低。还有一种方法是采用ArcGIS中的栅格计算器,将一个年份的地类编号乘以个100或是1000再加上另一个年份的…

软路由系统 --- VMware安装与配置OpenWRT

目录: OpenWrt安装与配置 一、下载OpenWRT映像二、img转换vmdk格式三、创建虚拟机(OpenWRT)四、启动系统(OpenWRT)五、配置网络信息(LAN、WAN)六、登录OpenWRT后台管理界面 一、下载OpenWRT映像 OpenWrt映…

利用notepad++删除特定关键字所在的行

1、按组合键Ctrl H,查找模式选择 ‘正则表达式’,不选 ‘.匹配新行’ 2、查找目标输入 : ^.*关键字.*\r\n (不保留空行) ^.*关键字.*$ (保留空行)3、替换为:(空) 配置界面参考下图: ​​…

Moretl开箱即用日志采集

永久免费: 至Gitee下载 使用教程: Moretl使用说明 使用咨询: 用途 定时全量或增量采集工控机,电脑文件或日志. 优势 开箱即用: 解压直接运行.不需额外下载.管理设备: 后台统一管理客户端.无人值守: 客户端自启动,自更新.稳定安全: 架构简单,兼容性好,通过授权控制访问. 架…

Java中的全局异常捕获与处理

引言 Java编程中,异常情况是不可避免的,优秀的异常处理机制是保证程序稳定性和可靠性的重要因素,当程序出现异常的时候,如果没有进行适当的处理,可能导致程序崩溃,丢失数据等严重问题。全局异常捕获与处理可…

基于Spring Boot的小区车辆管理系统

一、系统背景与目的 随着城市化进程的加快,小区内的车辆数量急剧增加,车辆管理问题日益凸显。传统的车辆管理方式存在效率低、易出错、信息不透明等问题。为了解决这些问题,基于Spring Boot的小区车辆管理系统应运而生。该系统旨在通过信息化…

Mapbox-GL 的源码解读的一般步骤

Mapbox-GL 是一个非常优秀的二三维地理引擎,随着智能驾驶时代的到来,应用也会越来越广泛,关于mapbox-gl和其他地理引擎的详细对比(比如CesiumJS),后续有时间会加更。地理首先理解 Mapbox-GL 的源码是一项复…

【计算机网络课程设计】校园网规划与设计

摘要 在科学技术飞速发展的时代,网络互联技术显示出了它蓬勃发展的生命力,它逐渐进入了人们的家居生活,使得当今社会的智能化和网络化越来越来明显。由于Internet的信息和服务内容不断的扩大,使得用户对网络的需求急剧增加。家庭…

单元测试-Unittest框架实践

文章目录 1.Unittest简介1.1 自动化测试用例编写步骤1.2 相关概念1.3 用例编写规则1.4 断言方法 2.示例2.1 业务代码2.2 编写测试用例2.3 生成报告2.3.1 方法12.3.2 方法2 1.Unittest简介 Unittest是Python自带的单元测试框架,适用于:单元测试、Web自动…

【数字化】华为数字化转型架构蓝图

导读:华为的数字化转型规划团队在2016年年底基于对愿景的系统诠释,整合出了数字化转型架构蓝图。该蓝图共分为5层,旨在通过数字化转型实现客户交互方式的转变、作战方式的转变、公司各平台业务能力的数字化、服务化以及运营模式的转变。 目录…

【射频仿真技巧学习笔记】Cadence修改图表背景、曲线颜色

很多初始设置的Cadence仿真出来的曲线是长下面这样的,背景是黑色,而且曲线是Dot点状fine细线,这样查看图像会很不方便 如果一条一条去改曲线的性质会很不方便, 这里我介绍一种方法,只需要输入几行代码就可以自动更改所…

数据结构-排序(来自于王道)

排序的基本概念 插入排序 在这个算法中,除了输入的数组本身,没有使用额外的数据结构来存储数据,所有的操作都是在原数组上进行的。因此,无论输入数组的大小 n 是多少,算法执行过程中所占用的额外空间是固定的&#xff…

zlmediakit搭建直播推流服务

参考连接 夏楚/ZLMediaKit gitee仓库(基于C开发的高性能流媒体服务器) ZLMediaKit 文档(官方文档) zlm wiki 维基 ZLMediaKit配置文件详解 ZLMediaKit播放url规则 resultful api web hook EasyPlayer.js 播放器 aizuda/z…

【ELK】Filebeat采集Docker容器日志

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 介绍filebeat是如何工作的 使用部署filebeat 介绍 Filebeat 是一个用于转发和集中日志数据的轻量级传送器。 Filebeat 作为agent安装在服务器上,监视指…

大数据-252 离线数仓 - Airflow 任务调度 Crontab简介 任务集成部署 入门案例

点一下关注吧!!!非常感谢!!持续更新!!! Java篇开始了! 目前开始更新 MyBatis,一起深入浅出! 目前已经更新到了: Hadoop&#xff0…