首页 > 其他分享 >代理模式和委托模式有什么区别

代理模式和委托模式有什么区别

时间:2024-10-12 09:49:52浏览次数:10  
标签:场景 委托 对象 代理 模式 访问

代理模式(Proxy Pattern)和委托模式(Delegation Pattern)在软件设计中都是常用的设计模式,但它们的目的和应用场景有所不同。
1. 代理模式:
目的:代理模式提供了一个代理对象来控制对原对象的访问。它在不直接访问实际对象的情况下,提供了对目标对象的间接访问。
应用场景:常用于懒加载(延迟初始化)、访问控制、日志记录、缓存等场景。
特点:
代理对象和目标对象通常实现相同的接口。
代理对象在将请求转发给目标对象之前或之后,可以添加额外的处理逻辑。
客户端通常不知道代理对象的存在,它将代理对象当作目标对象使用。
2. 委托模式:
目的:委托模式是一种对象组合的方法,它允许一个对象将任务委托给另一个对象,从而实现代码的复用和解耦。
应用场景:常用于实现回调、事件处理、策略模式等场景。
特点:
委托对象持有一个或多个其他对象的引用,并将任务委托给这些对象来执行。
委托关系通常更灵活,可以动态地改变委托对象。
客户端知道委托对象的存在,并且直接与委托对象交互。
区别:
控制级别:代理模式提供了对目标对象访问的控制,而委托模式更多是任务的分配。
目的:代理模式强调控制和间接访问,委托模式强调任务的分配和代码复用。
使用场景:代理模式常用于访问控制和延迟初始化,委托模式常用于回调和事件处理。
对象关系:在代理模式中,代理对象和目标对象通常有相同的接口,而在委托模式中,委托对象持有被委托对象的引用,但不一定有相同的接口。
在实际应用中,这两种模式可以结合使用,以满足更复杂的设计需求。
 

标签:场景,委托,对象,代理,模式,访问
From: https://blog.csdn.net/leijmdas/article/details/142867895

相关文章

  • 多代理强化学习综述:原理、算法与挑战
    引言多代理强化学习(Multi-AgentReinforcementLearning,MARL)是强化学习的一个重要分支,它将传统的单代理强化学习概念扩展到多代理环境中。在MARL中,多个代理通过与环境和其他代理的交互来学习最优策略,以在协作或竞争场景中最大化累积奖励。MAgent中代理之间的对抗(混合MARL示例......
  • apisix~自定义文件上传代理插件~支持form-data文件和kv参数
    参考文献https://stackoverflow.com/questions/24535189/composing-multipart-form-data-with-a-different-content-type-on-each-parts-with-jhttps://www.reddit.com/r/lua/comments/yaizxv/lua_post_multipartformdata_and_a_file_via/?rdt=60519https://github.com/rstudi......
  • C#设计模式详解:从简单工厂到抽象工厂
    在C#中,简单工厂(SimpleFactory)和抽象工厂(AbstractFactory)是两种常用的设计模式,它们都属于创建型设计模式,用于创建对象而无需在代码中显式指定具体的类。尽管它们的目的相似,但在复杂性和灵活性方面存在显著差异。简单工厂(SimpleFactory)简单工厂模式是一种不属于GoF(四人帮......
  • java单例模式懒汉式 双重校验 关键字volatile
    Volatile关键字的作用Volatile关键字的作用主要有如下两个:1.线程的可见性:当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。2.顺序一致性:禁止指令重排序。不保证原子性一、线程可见性我们先通过一个例子来看看线程的可见性:publicclassVolatileTest{ ......
  • 设计模式11
    packagecom.example.principle.ocp;publicclassApiInfo{privateStringapi;privatelongrequestCount;privatelongerrorCount;privatelongdurationOfSeconds;//privatelongtimeoutCount;publicStringgetApi(){r......
  • tour cpp: std::variant 实现无继承层次的访问者模式
    std::variant是基于模板而实现的一种包括了一个标志位的高级union对象;可以完全替代如下场景:structst{inttype;unionun{inti;floatf;};};#include<iostream>#include<variant>template<class...base>structoverloaded:bas......
  • 【STM32开发之寄存器版】(八)-定时器的编码器接口模式
    一、前言1.1编码器接口原理编码器模式主要用于检测旋转编码器的转动方向和转动速度。旋转编码器一般输出两路相位相差90度的脉冲信号(称为A相和B相),通过这两路信号,定时器可以判断编码器的旋转方向,并计数转动的脉冲数。1.2本次DEMO目标本次DEMO将使用STM32F103ZET6的PA6(......
  • 做点华为云代理业务,挣点小收入
    救园成功后,我们首先要做的是增加收入来源,实现收支平衡。这个月开始做一些云代理业务,先从华为云开始做,选择华为云是华为云代理商的推动。这家代理商和园子在2019年就有过合作,现在已经发展成为华为云代理商的前三,在救园期间他们主动联系我们商谈合作,并且是目前第一家也是唯一一家......
  • 最新升级!《地下城4》风灵月影十六项修改器:无敌模式/快速挖墙/无限经验
    地下城4修改器是一款极佳的游戏辅助工具,专为满足玩家的多样需求而设计,让每位玩家都能尽享游戏乐趣。它集多种修改功能于一体,助玩家变得更强,游戏之旅更顺畅。玩家可派遣角色出击,同时也要警惕敌人的猛烈攻击。修改器地址:https://bbs.18183.com/thread-10531-1-1.htmlhttps://b......
  • 内网渗透-隧道代理转发
    目录前言环境搭建工具清单工具使用Frp命令执行实验Lcx命令执行实验reGeorg命令执行实验Proxifierew(EarthWorm)正向代理命令执行实验反向代理命令执行实验SocksCapnetsh命令执行pingtunnel命令执行实验ngrok命令执行&&实验cs命令执行实验前言本文章介绍内网渗透中本人常用的一些......