首页 > 其他分享 >动态代理(超级详细)

动态代理(超级详细)

时间:2024-06-04 18:29:37浏览次数:14  
标签:跳舞 超级 代理 接口 当中 动态 方法 唱歌

动态代理(超级详细)

一:什么是动态代理?

举个例子,加入Student类里面有一个eat方法,现在我要去给这个方法去增加其他功能。比如吃饭之前要去拿筷子,盛饭。按照以前所学,我们只能把这两段代码都写在eat方法中,此时直接去修改代码,叫做侵入式修改。以后在一个成熟的项目当中,一般很少会去这么干。

问题来了,我现在不能去修改原有的代码,又要增加额外的功能,这个时候该怎么办?

此时我们就得去找一个代理,什么是代理?说白了就是中介公司,他会帮你先去做拿筷子和盛饭这两个准备工作,等真正吃饭了,再去调用Student里面的eat方法去吃饭,这个就是动态代理。

所以关于动态代理可以这么去理解:动态代理可以无侵入式的给代码增加额外的功能。

二:程序为什么需要代理?代理长什么样?

程序为什么需要代理?坤坤是一个大明星,非常厉害,能唱能跳,在程序当中反应出来就是在它的身上有sing()方法和dance()方法,。由于坤坤是一个大明星,唱歌跳舞不能太随便。比如唱歌跳舞的方法里面他得先准备话筒,准备场地,再去收钱,然后才能开始唱歌和跳舞。但是要注意了,这两个新增的功能,是写在方法的里面吗?如果不知道,就这样想:坤坤是一个大明星,干这些小事情很烦。所以坤坤会去找一个经纪公司,告诉他们我能唱能跳,但是有一些麻烦的事情你们得去帮我搞定。中介公司听到了就会给坤坤派去经纪人,也就是代理。代理会去帮坤坤去打理这些琐碎的事情。所以为什么需要代理?对象如果嫌身上干的事情太多了,可以通过代理来转移部分职责。

代理长什么样?在代码当中,代理长什么样说白了就是代理的里面可以写什么样的方法。你觉得这个代理里面能有什么方法呢?先告诉大家结论:它肯定是有唱歌和跳舞的方法。为什么?如果现在有人要让坤坤去唱歌和跳舞,坤坤怎么办?坤坤肯定会说,你别找我了,去找我的代理吧,此时这个人就会去找中间的代理。如果这个时候发现,代理的身上没有唱歌和跳舞的方法,你说这个人会怎么想?他会想你逗我呢?到底能不能唱歌能不能跳舞?所以说我们中间的代理,如果说想要代理坤坤,那么代理的身上就必须要有唱歌和跳舞的方法。但是话又说回来了,你说代理会唱歌会跳舞吗?代理是不会的。代理里面的方法我们一般会这么写:你找我唱歌,那我就先准备话筒,收钱,然后再去调用坤坤的唱歌方法,让坤坤去唱歌。跳舞也是一样的:代理先去准备场地,收钱,然后再去调用坤坤跳舞的方法,让坤坤来跳舞。这就是代理在代码当中长的样子。对象有什么方法想被代理,代理就一定要有对应的方法。只不过方法里面干的事情是不太一样的,代理会先把准备工作做完,然后再去调用对象当中的方法。

在正式写代码之前,还有一个小细节需要知道:中间的这个代理,它是如何知道坤坤要代理唱歌和跳舞的这两个方法?万一还有第三个打篮球呢?所以为了解决这个问题,在代码当中,我们是通过接口来搞定的。在事先会定义一个接口,有唱歌和跳舞两个方法,注意!在这个接口里面所有的方法就是我们想要代理的方法。如果你想要代理唱歌和跳舞,你就把唱歌和跳舞写在接口当中。如果你想要代理唱歌跳舞和打篮球,你就把唱歌跳舞和打篮球写在接口当中。写完了接口之后,代理和坤坤都要去实现中间的这个接口才是可以的。

public interface Star {
   
    sing方法
    dance方法
    // 把要代理的方法写在这个接口中,然后代理和坤坤都去实现这个接口
}

下面在代码当中看看如何实现动态代理:

public interface Star {
   
    // 我们可以把所有想要代理的方法定义在接口当中

    // 唱歌
    public abstract String sing(String name);

    //跳舞
    public abstract void dance();
}




标签:跳舞,超级,代理,接口,当中,动态,方法,唱歌
From: https://blog.csdn.net/m0_63464979/article/details/139328675

相关文章

  • vue动态组件
    动态组件是实现动态切换组件的功能。在Vue中,可以使用内置的<component>组件和is属性来实现动态组件的渲染。具体步骤如下:创建需要切换的组件,如home.vue和news.vue;在主页面引入home.vue和news.vue组件;使用<component:is="NextTickName"/>来动态切换组件,其中NextTickName是一......
  • 代码随想录算法训练营第四十六天|动态规划:完全背包理论基础、518.零钱兑换II、377. 组
    动态规划:完全背包理论基础文档讲解:代码随想录题目链接:52.携带研究材料(第七期模拟笔试)完全背包有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品都有无限个(也就是可以放入背包多次),求解将哪些物品装入背包里物品价值总......
  • Unity 代码动态添加EventTrigger
    publicstaticclassUIUltil{publicstaticvoidRigistEventTrigger(thisUIBehaviour_ui,EventTriggerType_eventTriggerType,Action<PointerEventData>_callback){if(_ui==null){Debug.LogError("invalidU......
  • c#动态类型
    原文链接:https://www.cnblogs.com/qqvvn/p/9932812.html一、动态类型其实是动态编译的一种形式。在.net4.0上添加新的动态类型dynamic,对于动态类型,就是在运行时才会确定的类型。1.dynamic关键字的使用1)使用var可以定义本地变量,该变量的实际数据类型取决于编译时,是在初次分配时......
  • 聊聊Java中的动态代理机制
    引言动态代理是Java中一个非常强大的特性,它允许我们在运行时动态地创建代理对象。本文将深入探讨动态代理的工作原理、实现步骤以及在实际项目中的应用。第一部分:代理模式基础代理模式是一种结构型设计模式,它为其他对象提供一个代替或占位符以控制对它的访问。这种模式在......
  • Vue实现动态组件
    使用场景:同一个区域因状态不同或者tab页,展示给用户不同模版样式逻辑的组件动态组件实现,是通过使用 is attribute来切换不同的组件<componentv-bind:is="currentTabComponent"></component> 一、公共动态组件父组件(可以通过keep-alive缓存)<!--公共动态组件isComp......
  • 【WAF】雷池的动态防护深度体验
    1.前言随着网络安全的不断发展,我们看到了越来越多的技术和策略应用于保护个人和组织的数据免受恶意攻击和侵入。从传统的防火墙和反病毒软件到先进的人工智能和机器学习算法,网络安全领域正在不断创新和进步。未来,我们可以期待更多基于数据分析和预测的安全解决方案,以及对人工......
  • 雷池WAF-动态防护新功能体验
    雷池WAF雷池WAF(WebApplicationFirewall,网络应用防火墙)是由长亭科技开发的一个网络安全产品,它专注于保护Web应用免受黑客攻击。今天主要讲的是长亭雷池最近新出的功能:动态防护安装雷池WAF支持多种安装方式:sh脚本安装、离线安装、牧云助手安装本篇文章以牧云助手为例:(需要您......
  • OpenCloudOS Kernel SIG 月度动态:发布 OCK 6.6.30-4 版本,新增特性支持
    作为OpenCloudOS核心SIG之一,KernelSIG负责OpenCloudOS内核的路线规划、方案讨论、技术能力输出,为OpenCloudOS提供更加稳定、可靠的内核基座。一、整体进展1、发布OCK6.6.30-4版本,合入Intel、龙芯、Phytium、兆芯等特性支持;2、OpenCloudOSKernel文档内容更新,实......
  • 《计算机网络微课堂》实验25 动态主机配置协议DHCP的作用
    下面我们来进行一个仿真实验,本仿真实验的目的在于验证动态主机配置协议DHCP的作用。我已经在软件中构建好了我们理论课中所使用的那个例子,并在各设备旁边标注出了所需的配置信息,我们的应用需求是不给局域网中的各主机手动配置IP地址,子网掩码、默认网关、DNS服务器等信息,而是......