设计模式: 结构型之代理模式(10)

代码设计:设计模式:10个结构型设计模式 以顺序表结构为基础,在表中传递数据或事件 举例:Java/Android的类加载机制以树状结构为基础,树中传递数据或事件 举例:Android的ViewTreeA->Mediator->B(->代表依赖)Mediator作为中介者,实现间接的A调用B的方法Adapter作为中介者,负责复用旧代码,完成新功能装饰器作为中介者,负责扩展旧的功能,在旧的功能的基础上添加新的代码代理器作为中介者,负责对旧功能是否能实现进行 阅读详情

代理模式概述

  • 代理模式(Proxy Pattern)是一种结构型设计模式,它提供了一种将类的功能委托给另一个类的机制
  • 在代理模式中,代理类(Proxy)充当客户端与被代理类(Real Subject)之间的中介,客户端通过代理类来间接地访问被代理类

1 ) 代理模式的核心思想

  • 代理模式的核心思想是为其他对象提供一个代理以控制对这个对象的访问
  • 代理类负责在客户端与被代理类之间建立一种关系,使得客户端能够间接地访问被代理类
  • 通过这种方式,我们可以在不修改原有代码的情况下,增加额外的功能,如权限校验、日志记录、性能监控等

2 ) 代理模式的结构

  • 代理模式通常包含以下几个角色
    • 被代理类(Real Subject):定义了客户端需要的真实功能
    • 代理类(Proxy):持有被代理类的实例,并提供与被代理类相同的方法,代理类可以在调用被代理类方法前后添加额外的逻辑
    • 客户端(Client):通过代理类来访问被代理类的功能,而不需要直接与被代理类交互

代理模式实现

// 被代理类  
class RealSubject {  
  request(): string {  
    return 'RealSubject: Handled request.';  
  }  
}  
  
// 代理类  
class Proxy {  
  private realSubject: RealSubject;  
  
  constructor() {  
    this.realSubject = new RealSubject();  
  }  
  
  request(): string {  
    console.log('Proxy: Before request...');  
    const result = this.realSubject.request();  
    console.log('Proxy: After request...');  
    return result;  
  }  
}  
  
// 客户端  
function clientCode(proxy: Proxy) {  
  console.log(proxy.request());  
}  
  
// 使用示例  
const proxy = new Proxy();  
clientCode(proxy);
  • 在这个示例中,RealSubject 是被代理类,它定义了客户端需要的真实功能。

  • Proxy 是代理类,它持有一个 RealSubject 的实例,并在调用 request 方法前后添加了额外的日志记录逻辑

  • clientCode 函数是客户端代码,它通过代理类来访问被代理类的功能

  • 当运行这段代码时,输出将会是:

    Proxy: Before request...  
    RealSubject: Handled request.  
    Proxy: After request...
    
  • 可以看到,客户端代码通过代理类间接地访问了被代理类的功能,并且在请求前后输出了额外的日志信息

代理模式总结


1 )代理模式的类型

  • 代理模式有多种类型,如虚拟代理、保护代理、远程代理等
  • 根据具体需求,可以选择合适的代理类型来实现所需的功能

2 )代理模式的优缺点

  • 优点

    • 功能增强与解耦
      • 代理模式能在不修改被代理类的情况下,为其增加额外的功能,从而实现对原有功能的扩展
      • 同时,代理模式能将调用者与被调用者分离,降低系统的耦合度,提高系统的可扩展性和可维护性
    • 权限控制
      • 代理模式可以控制对真实对象的访问权限,防止非法访问,从而保护目标对象的安全
    • 灵活性和适应性
      • 代理模式可以适应不同的应用场景,根据需求实现不同的代理策略
      • 例如,可以创建远程代理来处理远程对象,或者创建虚拟代理来优化系统性能
  • 缺点

    • 性能损耗
      • 由于代理类在调用被代理类的方法时需要额外进行一些操作,如权限检查、日志记录等,这可能会导致性能损耗,特别是在处理大量请求时。
    • 复杂度增加
      • 代理模式的引入可能会增加系统的复杂度,因为需要额外实现代理类,并在客户端与被代理类之间引入代理层。这可能会使代码结构变得复杂,增加开发和维护的难度
    • 请求处理速度变慢
      • 在客户端和目标对象之间增加一个代理对象,可能会导致请求处理速度变慢
      • 因为代理对象在传递请求和响应时需要进行额外的处理
  • 总的来说

    • 代理模式在提供功能增强、权限控制和灵活性等方面具有显著优点,但同时也存在性能损耗、复杂度增加和请求处理速度变慢等缺点
    • 在使用代理模式时,需要根据具体的应用场景和需求来权衡其优缺点,并谨慎选择是否使用代理模式

3 )总结

  • 代理模式是一种强大的设计模式,它允许我们在不修改原有代码的情况下,增加额外的功能或控制对对象的访问
  • 在 TypeScript 中,通过定义代理类并持有被代理类的实例,我们可以实现代理模式,并在代理类中添加所需的逻辑

代理模式与AOP的区别与联系


代理模式与AOP(面向切面编程)在软件开发中各有其独特的价值和应用场景,同时也存在一些联系

1 )首先,我们来探讨两者的区别

1.1 定义与目标:

  • 代理模式:这是一种设计模式,其主要目标是为其他对象提供一个代理以控制对这个对象的访问
  • 代理类通常包含了对被代理类的方法调用,并可能在调用前后添加额外的逻辑,如权限检查、日志记录等
  • AOP:AOP是一种编程思想,它关注的是程序中的横向关注点,如日志记录、事务管理等
  • AOP通过预编译方式和运行期间动态代理实现程序功能的统一维护,旨在将程序中散落的横切关注点进行统一处理,从而提高代码的可维护性和复用性

1.2 应用范围:

  • 代理模式:主要应用在单个对象或类的访问控制和功能增强上。它通常用于隐藏对象的复杂性、控制对对象的访问或实现某些额外的业务逻辑。
  • AOP:则更侧重于跨多个类或方法的关注点处理。AOP可以在不修改现有代码的情况下,为多个类或方法添加额外的功能,如日志、安全、事务管理等。

1.3 实现方式:

  • 代理模式:通常通过静态代理或动态代理实现。静态代理需要为每个被代理类手动编写代理类,而动态代理则可以在运行时动态生成代理类。
  • AOP:主要依赖于动态代理技术,如JDK动态代理或CGLIB等,在运行时将切面逻辑织入到目标对象中。

2 )接下来,我们来看两者之间的联系

2.1 底层机制

  • AOP的底层实现往往运用了动态代理技术,这与代理模式中的动态代理实现方式有一定的相似性
  • 代理模式为AOP提供了一种可能的实现方式

2.2 关注点分离

  • 无论是代理模式还是AOP,它们都在一定程度上实现了关注点的分离
  • 代理模式将访问控制、功能增强等关注点从被代理类中分离出来,而AOP则将日志记录、事务管理等跨多个类或方法的关注点进行统一处理

2.3 提高代码的可维护性和复用性

  • 两者都能通过分离关注点来提高代码的可维护性和复用性
  • 代理模式通过代理类来复用访问控制和功能增强的逻辑,而AOP则通过切面来复用跨多个类或方法的关注点处理逻辑

3 ) 综上所述

  • 代理模式与AOP在定义、目标、应用范围和实现方式上存在明显的区别,但它们都在关注点分离和代码复用方面有着共同的追求
  • 在实际开发中,可以根据具体需求选择合适的技术来提高代码的质量和可维护性
10种javascript设计模式 通过最近的面试我发现,很多同行小伙伴做了几年的开发竟然连基本的设计模式都不知道,甚至可能连什么是设计模式都说的有点模棱两可。如果作为几年经验的中高级前端这其实是不应该的,因此才想写一篇文章说明什么是设计模式??设计模式有哪些分类??然后举例??好了废话不多说,下面让我们直入主题。提示:以下是本篇文章正文内容,下面案例可供参考用大白话说前端的设计模式,其实就是一种可以在多处地方重复使用的代码设计方案,只是不同的设计模式所能应用的场景有所不同。 阅读详情

相关推荐

设计模式 3、结构型模式

由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。Java中的代理按照代理类生成时机不同又分为静态代理和动态代理。静态代理代理类在编译期就生成,而动态代理代理类则是在Java运行时动态生成。动态代理又有JDK代理和CGLib代理两种。如果去欧洲国家去旅游的话,他们的插座如下图最左边,是欧洲标准。而我们使用的插头如下图最右边的。因此我们的笔记本电脑,手机在当地不能直接充电。

qq_41493103的博客 935

JAVA基础10 设计模式:结构型模式(适配器 代理模式 桥接模式 享元模式 组合模式 装饰器模式)

结构型模式:  核心作用:是从程序的结构上实现松耦合,从而可以扩大整体的类结构,用来解决更大的问题 分类: 适配器模式 代理模式 桥接模式 装饰模式 组合模式 外观模式 享元模式 我们在学习中见过的场景 java.io.InputStreamReader(InputStream) java.io.OutputStreamWriter(OutputStream) 案例 适配器模式 pu

夜归人 1024

Java结构型设计模式-代理模式

代理模式()是常用的结构型设计模式之一,其定义如下:Provide a surrogate or placeholder for another object to control access to it.(为其他对象提供一种代理以控制对这个对象的访问。关于代理模式介绍就到这里,通过本文的学习,我们清楚知道代理设计模式的主要用途是控制访问或提供包装器实现以获得更好的性能。

在技术的广袤天地里,本博客如精准罗盘。剖析前沿科技,深掘代码奥秘,以精炼笔触,带您穿越复杂技术迷宫,速达知识彼岸。 1743

结构型设计模式

结构型设计模式是一种关注怎样组合类和对象以形成更大的结构,同时简化结构间的关系的设计模式。这些模式帮助确保系统部件间的独立性和可维护性。

m0_67550226的博客 2234

光流法实战:如何用OpenCV的Farneback算法实现图像对齐(附调参技巧)

本文详细介绍了如何使用OpenCV的Farneback稠密光流算法实现图像对齐,包括核心原理、参数调优和工程实现。通过实战代码和参数优化策略,帮助开发者解决动态场景中的图像对齐问题,提升多帧融合和视频处理的效果。

weixin_29266007的博客 292

PDMS二次开发入门:手把手教你用PML2写第一个交互式窗体工具

本文详细介绍了如何使用PML2进行AVEVA PDMS二次开发,从零开始构建交互式窗体工具。通过PML2语言的面向对象特性、即时调试能力和深度系统集成优势,开发者可以高效创建自动化设计工具、批量修改属性和定制报表系统。文章包含开发环境配置、基础语法、窗体架构设计、事件处理等实战内容,帮助读者快速掌握PDMS二次开发技能。

weixin_29281941的博客 274

设计模式系列(15):结构型模式 - 代理模式(Proxy)

另一个对象提供代理或占位符,以控制对它的访问。用于在访问对象时引入一定的间接性,实现额外的控制功能。

1179

Qt5.14.2开发Mqtt应用程序

然后,你就做不下去了…很明显,大部分博主写的东西不是缺头就是缺尾,带偏了许多读者。,因此我们需要clone的是这个分支版本,而不是这个默认的。然后将编译产物中include里的所有.h文件复制到。下载完后直接默认安装即可,这一步没什么好说的。看到了没,这个才是正确的操作方式,而主线的。信号来判断,自行实现自己的槽函数。然后选择构建方式,这里我选择的是。信号来判断自行实现自己的槽函数。信号来判断自行实现自己的槽函数。源代码,如下图所示,双击打开。收到下行消息时,可以通过连接。

Bruce.yang的嵌入式之旅 2312

设计模式之结构型:代理模式

适配器模式是一种​​结构型设计模式​​,用于解决两个不兼容接口之间的兼容性问题。它通过​​包装对象​​的方式,将已有接口转换为客户端期望的接口,类似电源适配器的功能。

keep simple 1098

“双系统”出炉!瑞芯微RK3562J非对称AMP:Linux+RTOS/裸机

执行如下命令运行Linux应用程序rpmsg_echo,发送8个rpmsg数据包至运行Baremetal程序的Cortex-M0核心,当Cortex-M0核心每收到1个rpmsg数据包就会将数据包发送回Linux端。开发者可灵活分配任务或指定核心间通信,从而增强系统稳定性,减少崩溃风险,保障数据完整。下文以Cortex-A53(CPU0、CPU1、CPU2、CPU3)核心运行Linux系统与rpmsg_echo应用程序,Cortex-M0(MCU)核心运行Baremetal程序为例进行演示。

创龙,嵌入式一体化解决方案商 468

Android软键盘系统深度解析:架构、原理与实现

Android软键盘系统深度解析:架构与实现原理 本文系统剖析了Android软键盘的核心工作机制。作为系统级输入服务,软键盘具有双重属性:既是可安装的独立应用,又深度集成于系统框架中。文章详细解读了软键盘的系统架构,包括其与InputMethodManagerService(IMMS)和WindowManagerService(WMS)的交互机制,以及通过InputConnection实现的跨进程通信流程。同时分析了输入法窗口的特殊管理策略、布局调整模式,并深入探讨了输入预测引擎的实现原理,包括词典加载、

保持专注,保持热爱 116

代理模式(委托模式)— 结构型

结构型简介 结构型模式主要总结了一些类或对象组合在一起的经典结构,这些经典的结构可以解决特定应用场景的问题。结构型模式包括:代理模式、桥接模式、装饰器模式、适配器模式、门面模式、组合模式、享元模式。 代理模式 代理模式又分为:静态代理和动态代理 律师这个职业大家应该都了解;就是代理打官司;下面以律师代理诉讼为例介绍代理模式 静态代理 静态代理的特点就是代理和被代理都要实现或者继承同一个接口或抽象类; 诉讼接口类 public interface ILawsuit { //提交申请

ezconn的博客 1059

《电磁兼容设计》专栏说明

本专栏自2024年1月起开始更新,仅设此一个电磁兼容相关知识专栏,并将一直持续更新下去,无期限

linkking27的博客 794

设计模式——结构型模式

由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。Java中的代理按照代理类生成时机不同又分为静态代理和动态代理。静态代理代理类在编译期就生成,而动态代理代理类则是在Java运行时动态生成。动态代理又有JDK代理和CGLib代理两种。

Java学不会的博客 1245

基于深度学习的异常检测实战:从自编码器到GAN

本文通过一个完整的实战案例,展示了如何使用自编码器和GAN进行异常检测。我们详细介绍了数据准备、模型定义、训练和评估的步骤,并提供了可运行的代码。希望本文能为读者在实际项目中应用异常检测技术提供实用的指导和启发。

Programming Talk 243

【62】OpenCV C++实战篇——【项目实战】OpenCV C++ 精准定位“十字刻度尺”中心坐标,过滤图片中的干扰,精准获取十字交点坐标

本文针对工业相机拍摄的2000万像素图像中十字刻度尺的精确定位问题进行了研究。面对图像较暗、存在红黄干扰、记号笔涂抹及细节模糊等难点,提出了一种基于霍夫变换的解决方案。通过灰度化、反色、二值化预处理后,对比分析了多尺度霍夫直线(HoughLines)和渐进概率霍夫线段(HoughLinesP)两种方法的定位效果。实验结果表明,HoughLinesP由于具有最小线段长度和间隙约束,在直线贴合度和交点定位精度上表现更优,其返回的线段端点坐标也更便于后续处理。该研究为工业视觉中微小目标的精确定位提供了实用参考。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 976

设计模式—代理模式

在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。 意图:为其他对象提供一种代理以控制对这个对象的访问。 主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来...

dmxhcwk90096748的博客 99

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【设计模式】代理模式

代理模式是一种结构型设计模式,通过引入代理对象来控制对目标对象的访问。它包含三个核心角色:抽象主题(Subject)、代理(Proxy)和真实主题(RealSubject)。代理模式的主要应用场景包括:远程代理(访问远程对象)、虚拟代理(延迟加载大资源)、保护代理(权限控制)、智能引用代理(附加操作)和缓冲代理(共享结果)。典型应用包括图片懒加载、权限管理系统和收费查询系统等。代码实现上,代理类通常持有对真实对象的引用,并在调用前后执行额外操作。该模式在不修改原对象的情况下增强了功能,提高了系统灵活性和安全

weixin_44131922的博客 1288

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【设计模式】代理模式(结构型)⭐⭐⭐

代理模式(Proxy Pattern)是一种结构型设计模式,它允许通过一个代理对象来控制对另一个对象的访问。

qq_43196617的博客 1225

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Java设计模式之代理模式

代理模式

qq_27656927的博客 1327

【设计模式】结构型模式全攻略:从入门到精通的万字实战指南

本文我们将学习结构型设计模式, 结构型模式主要总结了一些类和对象组合在一起的经典结构,这些经典结构可以解决对应特定场景的问题。

c18213590220的博客 2086

设计模式之代理模式

代理模式是一种结构型设计模式,它提供了一个代理对象,以控制对其他对象的访问。代理对象在客户端和目标对象之间起到中介作用,可以控制、增强或管理对目标对象的访问。首先,我们定义一个接口Image,它将作为所有图像的基类。接下来,我们定义具体的图像类RealImage,它实现Image接口,表示被代理的真实图像对象。@Override然后,我们定义代理类ProxyImage,它实现Image接口,包含对RealImage的引用,控制对RealImage的访问。@Override。

yimeixiaolangzai的博客 1003

结构型设计模式(七种)

3. 结构型设计模式 结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者采用组合或聚合组合对象。 由于组合关系或聚合关系比较继承关系耦合度低,满足“合成复合原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。 结构型模式分为以下 7 种: 1)代理(Proxy)模式:为某对象提供一种代理以控制对象的访问。即客户端通过代理简介地访问该对象,从而限制、增强或修改该对象的一些特征。 2)适配器(Adapter)模式:将一个类的接口转

夏天 5485

设计模式结构型——代理模式

代理模式(Proxy Pattern)是一种结构型设计模式,它允许通过创建一个代理对象来间接访问原始对象。代理模式的核心思想是将对目标对象的访问进行控制,并在访问前后执行一些额外操作,以增强或限制原始对象的功能。在代理模式中,代理对象和原始对象都实现相同的接口,使得客户端无需知道实际的对象,只需要通过代理去访问目标对象。代理对象可以拦截对目标对象的访问,然后决定是否允许、何时以及如何访问目标对象。总之,代理模式通过引入代理对象,实现了对目标对象的间接访问和控制,提供了更加灵活和安全的对象访问方式。

tszc95的博客 608

06结构型设计模式——代理模式

代理模式适用于为其他对象提供一种代理以控制对这个对象的访问。代理模式,作为结构型设计模式之一,广泛应用于软件设计的各个领域,其核心就是引入一个代理对象来控制对目标对象的访问。在实际生活和软件系统中,代理模式有很多体现,比如代驾、代练、代购机票等,都能看做是代理模式的实际应用。举例:在组织结构中,秘书通常被视为老板的代理,他们帮助处理外来事务,转达重要信息,代理老板的职责。此外,在网络通信中,代理服务器也是代理模式的典型应用,它提供了中转服务,对外可以隐藏内部网络结构,对内则对外部请求进行过滤和处理。

qq_55610255的博客 901
上一篇: 设计模式: 结构型之桥接模式(9)
下一篇: 设计模式: 结构型之外观模式(11)
Wang's Blog
博客等级 码龄12年 7433粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值