代理模式(Proxy Pattern):静态代理 - 最易懂的设计模式解析

【图文详解系列】设计模式之代理模式(Proxy Pattern) 什么是代理模式?代理模式的定义:代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。代理模式的UML图:从UML图中,可以看... 阅读详情

目录

这里写图片描述

1. 介绍

1.1 定义
给目标对象提供一个代理对象,并由代理对象控制对目标对象的引用

代理对象:起到中介作用,连接客户端和目标对象
例子:电脑桌面的快捷方式。电脑对某个程序提供一个快捷方式(代理对象),快捷方式连接客户端和程序,客户端通过操作快捷方式就可以操作那个程序

1.2 主要作用
通过引入代理对象的方式来间接访问目标对象

1.3 解决的问题
防止直接访问目标对象给系统带来的不必要复杂性。

2. 模式原理

2.1 UML类图 & 组成
这里写图片描述

2.2 实例讲解
接下来我用一个实例来对代理模式进行更深一步的介绍。
a. 实例概况

背景:小成希望买一台最新的顶配Mac电脑
冲突:国内还没上,只有美国才有
解决方案:寻找代购进行购买

代购(代理对象) 代替 我(真实对象) 去买Mac(间接访问的操作)

b. 使用步骤
步骤1: 创建抽象对象接口(Subject):声明你(真实对象)需要让代购(代理对象)帮忙做的事(买Mac)

public interface Subject {  
              public void buyMac();
}

步骤2: 创建真实对象类(RealSubject),即”我“

  public class RealSubject implement Subject{
    @Override
    public void buyMac() {  
        System.out.println(”买一台Mac“);  
    }  
}

步骤3: 创建代理对象类(Proxy),即”代购“,并通过代理类创建真实对象实例并访问其方法

public class Proxy  implements Subject{

    @Override
    public void buyMac{

      //引用并创建真实对象实例,即”我“
      RealSubject realSubject = new RealSubject();

      //调用真实对象的方法,进行代理购买Mac
      realSubject.buyMac();
      //代理对象额外做的操作
      this.WrapMac();
    }

     public void WrapMac(){
      System.out.println(”用盒子包装好Mac“);  
    }
}

步骤4: 客户端调用

public class ProxyPattern {

    public static void main(String[] args){

    Subject proxy = new Proxy();
    proxy.buyMac();
    }

}

结果输出

买一台Mac
用盒子包装好Mac

通过上述这个常见的生活例子,我相信你已经完全明白了代理模式的原理了!!

3. 优缺点

在全面解析完代理模式后,我来分析下其优缺点:

3.1 优点
协调调用者和被调用者,降低了系统的耦合度
代理对象作为客户端和目标对象之间的中介,起到了保护目标对象的作用
3.2 缺点
由于在客户端和真实主题之间增加了代理对象,因此会造成请求的处理速度变慢;
实现代理模式需要额外的工作(有些代理模式的实现非常复杂),从而增加了系统实现的复杂度。

4. 应用场景

当需要为一个对象再不同的地址空间提供局部的代表时
此时的代理模式称为远程代理:为一个对象在不同的地址空间提供局部代表。

目的:

隐藏一个对象存在于不同地址空间的事实;
远程机器可能具有更好的计算性能与处理速度,可以快速响应并处理客户端请求。

当需要创建开销非常大的对象时
此时的代理模式称为虚拟代理:通过使用过一个小的对象代理一个大对象。

目的:减少系统的开销。

当需要控制对原始对象的访问时
此时的代理模式称为保护代理:控制目标对象的访问,给不同用户提供不同的访问权限

目的:用来控制对真实对象的访问权限

当需要在访问对象时附加额外操作时
此时的代理模式称为智能引用代理,额外操作包括耗时操作、计算访问次数等等

目的:在不影响对象类的情况下,在访问对象时进行更多的操作

以上是最常用的使用场景,其他还包括:

防火墙代理:保护目标不让恶意用户靠近
Cache代理:为结果提供临时的存储空间,以便其他客户端调用.

代理模式(Proxy Pattern) 代理模式是一种结构型设计模式,它允许你提供一个代理对象来控制对另一个对象(称为"被代理对象"或"目标对象")的访问。代理对象充当了客户端和目标对象之间的中介,拦截对目标对象的所有调用。封装性:客户端与目标对象之间的中间层可以起到保护目标对象的作用扩展性:符合开闭原则,可以在不修改目标对象的前提下扩展目标对象的功能灵活性:可以通过代理控制对目标对象的访问,并增加额外的业务逻辑解耦性:可以将与目标对象无关的功能抽离出来,保持目标对象的纯粹性。 阅读详情

相关推荐

安装keil5(MDK)及导入pack包教程

首先说明的是我安装的Keil版本为Keil V5.29.0.0 1、安装软件 右键管理员权限运行安装包 设置安装路径以及pack的存放路径 随意输入First Name和E-mail 安装驱动 完成软件安装,然后可以先关闭弹出的Pack Install(一会再添加) 2、激活一下软件 打开桌面的Keil File → License Management(我之前注册过了) 右...

hrx-@@ 10万+

一起学java设计模式--代理模式(结构型模式)

代理模式 应用软件所提供的桌面快捷方式是快速启动应用程序的代理,桌面快捷方式一般使用一张小图片来表示(Picture),通过调用快捷方式的run()方法将调用应用软件(Application)的run()方法。使用代理模式模拟该过程,绘制类图并编程实现。

OS4key 4036

生成对抗网络(GAN、DCGAN、ACGAN)-----学习笔记

生成对抗网络学习笔记 生成对抗网络有两个关键结构:生成模型、判别模型。 生成模型:输入是一个服从正态分布的N维向量,利用这个N维向量生成一张图片。 判别模型:对于生成模型输出的图像判别它是不是真的图像。 生成模型和判别模型的博弈关系在于:生成模型的目的是生成让判别模型无法判别真伪的图像,而判别模型的目的是判断输入图像的真伪。 结合代码来看生成对抗网络中,生成器和判别器的训练过程: 判别模型的训...

weixin_43227526的博客 5491

23种设计模式之代理模式(Proxy Pattern)

本篇文章将23种设计模式中的代理模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。

小威的博客 2万+

S7-1200PLC期末复习题(第七章)

A.0 B.1 C.4 D.-4 A、CV = 0 B、CV = 1 C、CV < 4 D、CV >= 4A、0,0 B、3,0 C、1,1 D、3,1 A、0 B、1 C、先是1,再变为0 D、先是0,再变为1置位输出:常开触点M0.0闭合,Q0.0变为1状态并保存该状态,即使M0.0断开,Q0.0也保持1状态。 复位输出:常开触点M0.1闭合时,Q0.0变为0状态并保持该状态,即使M0.1断开,Q0.0也保持为0状态。 A、1 B、0 C、5 D、10RESET_BF指令需要两个参数,第一个是复位的位数

qq_52251819的博客 4421

基于STM32的家用新风系统智能控制器 | 保姆式教程 开源可复刻

本项目基于STM32F103C8T6核心控制器,完整实现了家用新风系统智能控制器的全功能开发,覆盖多传感器数据采集、双模式控制、PID调速、异常报警、掉电记忆等核心功能,全程采用保姆式无跳步教学,从硬件选型、接线、CubeMX配置、代码开发、调试排坑全流程拆解,跟着步骤一步步操作,就能顺利完成项目复刻

ZhongWeiXiang9的博客 468

【设计模式】Java 设计模式之代理模式(Proxy Pattern)

然而,随着技术的不断发展和业务需求的不断变化,我们也需要对代理模式进行扩展和思考,以适应新的挑战和需求。未来,我们可以继续探索代理模式与其他技术的结合,以及如何更好地优化代理模式的性能,为构建高质量的软件系统提供有力支持。总结来说,代理模式是一种强大的设计模式,它可以在不修改原有代码的基础上增强对象的功能、控制对象的访问以及实现解耦。在某种意义上,代理模式也可以看作是一种特殊的装饰器模式,它主要关注于控制对对象的访问和增强对象的功能,而不是动态地添加职责。:主要用于控制对开销大的对象的访问。

新手村长的专栏 1745

如何跑通SuperPoint+LightGlue的训练代码使用gluefactory进行训练和评估?

🏆本文收录于专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家!持续更新中,up!up!up!!

**My Coding Family** 1786

代理模式(Proxy Pattern) -(最通俗易懂的案例)

1.什么是代理 Proxy(代理)模式是常见设计模式之一,“代理”顾名思义就是“替代”的意思,很容易理解。根据GoF(《Design Patterns: Elements of Reusable Object-Oriented Software》的四位作者)的代理设计模式意图是:Provide a surrogate or placeholder for another object to con...

世银的博客 4592

华为OD机试真题 新系统2026-04-08 Python&JS 实现【配置操作失败数量统计】

模拟一个系统的命令行配置,包含添加、修改、删除三项操作,详情如下: 添加操作命令:add_rulerule_id=1rule_index = 18 修改操作命令: mod_rule rule_id= 1rule_index = 100 删除操作命令:del_rulerule_id=1

MISAYAONE的博客 588

超大规模系统(千万级用户)中实现字段级权限控制

摘要:本文提出了一套分布式架构下的字段级权限优化方案,结合RBAC+ABAC混合模型与技术手段实现性能与安全的平衡。方案包括:1)权限模型优化,采用RBAC预计算基础权限与ABAC动态校验敏感字段;2)数据层优化,实现动态字段过滤与加密存储;3)多级缓存策略与预计算机制提升性能;4)分布式架构设计,通过网关校验和策略引擎集群保证扩展性。最终在千万级用户系统中实现99.9%可用性,权限校验延迟控制在50ms以内。

从技术实践立足,从项目管理方法论延伸思考 1353

设计模式-11代理模式Proxy Pattern

代理模式是一种结构型设计模式,通过代理对象控制对目标对象的访问。它适用于远程访问、资源控制、延迟加载等场景,可分为静态代理和动态代理两种实现方式。静态代理需要手动创建代理类,而动态代理则利用Java反射机制在运行时生成代理对象。示例代码展示了静态代理实现图片延迟加载和动态代理实现权限验证,演示了如何通过代理模式添加额外功能(如访问控制、性能优化)而不修改原始对象。

d3y1`5 81_09 1418

ROS机器人未知环境自主探索功能包explore_lite总结

本系列文章主要针对ROS机器人常使用的未知环境自主探索功能包explore_lite展开全源码的详细解析,并进行概括总结。 本系列文章共包含六篇文章,前五篇文章主要介绍explore_lite功能包中 explore.cpp、costmap_tools.h、frontier_search.cpp、costmap_client.cpp等源码实现文件中全部函数的详细介绍,第六篇文章进行概括总结,包含自主探索功能包explore_lite的简介,实现未知环境自主探索功能的原理及流程总结,效果演示,使用功能包exp

慕羽★的博客 4461

Spring框架之代理模式 (Proxy Pattern)

代理模式是一种非常有用的设计模式,能够在不修改目标对象的情况下增强其功能。通过静态代理和动态代理的不同实现方式,可以根据具体场景选择最合适的代理模式。代理模式在实际开发中应用广泛,尤其是在权限控制、日志记录、缓存管理和事务处理等方面发挥了重要作用。理解和灵活应用代理模式,将有助于开发出更为灵活、可维护的系统。

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 1951

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

设计模式-06.代理模式(Proxy Pattern)-静态代理

设计模式-06.代理模式(Proxy Pattern)

ctotalk 5732

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

设计模式-代理模式-Proxy Pattern

首先定义一个接口,这个接口包含所有代理类和实际对象需要实现的方法。

wesigj的博客 1627

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

代理模式(Proxy Design Pattern )-深入浅出

jdk代理和CGLIB代理:使用CGLib实现动态代理,CGLib底层采用ASM字节码生成框架,使用字节码技术生成代理类,在JDK1.6之前比使用Java反射效率要高。唯一需要注意的是,CGLib不能对声明为final的类或者方法进行代理,因为CGLib原理是动态生成被代理类的子类。

qq_74092815的博客 1329

【设计模式】——代理模式(Proxy Pattern)

代理模式(Proxy Pattern)是结构型设计模式的一种,它为其他对象提供一种代理以控制对这个对象的访问。代理对象在客户端和目标对象之间起到中介的作用,可以在不改变客户端代码的情况下增强或控制对象的访问。本文将详细探讨代理模式在C++中的实现和应用。

J^T的博客 1314

设计模式 代理模式(Proxy Pattern)

在大多数情况下,您可以使用类的 getClassLoader() 方法来获取类加载器,但是基本类型和 Object 类没有类加载器,它们是由特殊的 Bootstrap ClassLoader 加载的。CGLIB 是一种强大的工具,可以用于创建动态代理,尤其是在不支持 JDK 动态代理的场景下(即目标类没有实现接口)。JDK 动态代理是一种强大的工具,它允许您在不修改现有类的情况下为现有类添加新的行为。JDK 动态代理是一种在运行时生成代理类的技术,它允许您为任何实现了接口的类创建代理对象。

ling_zhi_xin的博客 1710

Android设计模式之代理模式(Proxy Pattern)

代理模式介绍代理模式(Proxy Pattern)也称为委托模式,是结构型设计模式的一种,代理模式在各类开发中运用的相当广泛,不论是j2ee,android还是ios,都能看到它的身影,所以说设计模式无处不在。代理模式的定义:为其他对象提供一种代理以控制这个对象的访问。通俗一点:找别人做你想做但是做不了的事情。代理模式的UML类图,如图:角色介绍: (1) 抽象主题(Subject):定义了真实

happy_horse的博客 3875

Android常见设计模式——代理模式(Proxy Pattern)

文章目录1. 前言2. 代理模式(Proxy Pattern)2.1 静态代理模式2.2 动态代理模式3. Android 中的代理模式3.1 Retrofit中的代理模式(没有被代理者) 1. 前言 首先看下百度百科对代理模式的介绍: 代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。 其实也就是中介模式或者委托模式。在日常生活中代理模式很多,比如叫同事带饭、打官司等。使用代理模式的

梦否 2926

JAVA设计模式之 代理模式【Proxy Pattern】

一、概述     给某一个对象提供一个代理,并由代理对象来完成对原对象的访问。代理模式是一种对象结构型模式。 二、适用场景     当无法直接访问某个对象或访问某个对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,委托对象与代理对象需要实现相同的接口。 三、UML类图           四、参与者      1、接口类:Subje

小吕丶Code阶区 3846

设计模式-代理模式(Proxy Pattern)

代理模式 定义 代理模式又叫委托模式,是为某个对象提供一个代理对象,并且由代理对象控制对原对象的访问。代理模式通俗来讲就是我们生活中常见的中介。 类型 结构型。 例子 我们每次在Controller层中实现向数据库insert数据,一般都是经过Service层、Dao层,再到数据库,这里我们将Service层进行代理。 为了简单,有些地方并没有像实际开发一样严格。 Order类(订单类),实体类。...

kaven 1689

代理模式 (Proxy Pattern)

代理模式是一种结构型设计模式,它为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

懵萌长颈鹿的博客 969
上一篇: 单例模式(Singleton)- 最易懂的设计模式解析
下一篇: 代理模式 - 动态代理
GraceJava
博客等级 码龄10年 131粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值