大话Java代理模式
一、什么是代理
首先理解一下什么是代理。简单来说,代理就你要做一件事情,我替你把事情做了。这是现实生活中我们遇到的代理的需求场景。但写代码的时候对代理场景的需求,跟现实场景有点区别,本质上还是帮你做事(调用要执行的方法),但在代码世界里,如果仅仅只是把要调用的方法执行了,那完全没有必要再新建类(代理类)去执行,因此,编码的代理场景,更多体现在,我不但要替你把原本先做的事情(调用方法)做了,我还要把你不需要做、或不想做的事情给做了,我们称其为方法的增强。
二、代理方式
众所周知,java里面的代理模式分为静态代理和动态代理两种方式。那如何理解这两种代理方式呢?以前我总认为这两种方式是对立的,这给我的理解带来不小的阻碍。其实不然,后来我才发现,它们并不对立,而是解决编码的过程中代理的两种不同场景而已。
前面我们提到,编码的代理需求,更多体现在于方法的增强。围绕这个核心,有利于我们更好的理解两者的异同。
- 静态代理
首先我们举一个静态代理的使用场景,有利于我们更好的理解。我始终相信每一项技术的发展,都是来着现实生活的推动。因此我们可以找一个现实场景进行类比。
比如近两年的新冠疫情。在此插一句,祝人类早日战胜疫情,早日摆脱口罩的束缚,早日自由畅快地呼吸。提到战胜疫情,就不得不提到疫苗,人类想战胜疫情,目前最好的方式就是疫苗的研发。那疫苗跟我们代理有啥关系呢?
我们都知道,疫苗在研发处理的初期,都是比较紧缺的,所以在初期,对疫苗的使用,肯定是先给最需要的人先使用。比如先给一线医护人员使用。那打疫苗就得报名,她们还被告知是手动填表报名,可能我们的没了的医护天使在一线抗战都非常忙,没有时间报名,那这个时候有个小聪明就想,我也要为疫情抗战出一份力,我没法到一线工作,我只是能帮一线医护人员报名,帮他们代理报名。这时候,一线医护人员是一个特定的群体(对应我们的类),手动填表报名是一个要被代理的特定动作(一个方法),小聪明(代理类)代理报名。
为特定的类,固化的方法代理,我们称之为静态代理,是对原有业务逻辑的扩充。小聪明很明确,他要为一线医护天使报名打疫苗,并处理一些杂七杂八的事情,不耽误他们的工作。
- 动态代理
后来随着疫苗生产的加速推进,疫苗越来越多。对越来越多的群体开放,学生想报名,工人想报名,画家想报名,程序员也想报名的,叫不上名的人都想报名。这时原先的手动填表已经满足不了需求了。需求,没错,就是需求推动社会的进步,技术的发展。这时政府相关机构会开发通道,让更多有能力的人或机构来帮忙解决报名的事情。你会看到,现在琳琅满目的报名方式:网站报名,社区报名,小程序报名,各式各样的报名方式被开发出来,只为一件事,就是报名。
对应我们的编程,其实的就是写一个接口,报名渠道,比如说小程序,开放报名通道就是接口里面提供报名的方法,不断增加的各类群体都想通过小程序报名,是对接口方法的实现,小程序不断的完善自己对各类群体的报名支持,我们可以理解为动态生成代理类。然后小程序完成报名,就是对人们报名需求的代理。通过这些代理进行报名,可以快速获上交材料,获得报名资格,这是对方法的增强。
- 区别
可以看到,静态代理和动态代理都提到了方法的增强,这是我们一直强调的代理的场景。那他们有什么不同呢。从上面例子不难理解,动态代理是为了解决静态代理的局限性而产生的。静态代理是对类里特定方法的增强,而动态代理是对接口的里方法的增强,只要实现该接口的类,都能实现方法的增强。由于实现接口的方法可以有无数个类,所以才有了动态代理的需求
大话Java代理模式的更多相关文章
- Java代理模式
java代理模式及动态代理类 1. 代理模式 代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目 ...
- Java代理模式示例程序
Java代理模式示例程序 当然不是我想出来的,是我看的一个网上教程里的. 模拟的是一个对电脑公司的代理 真实类的接口: public interface SaleComputer { public S ...
- java 代理模式 总结
1.前言 最近舍友去面试遇到了关于java代理模式的问题. 我虽然知道怎么使用,但是没有做过正经的总结,因此有了这篇随笔,好好总结一下三大代理模式底层原理. 事实上,在开发项目的时候,基本用不上代理, ...
- 浅谈java代理模式
讲解java代理模式 目录 讲解java代理模式 何谓代理模式 静态代理 动态代理 JDK动态代理 CGLIB动态代理 何谓代理模式 代理模式,即Proxy Pattern,23种java常用设计模式 ...
- Java代理模式/静态代理/动态代理
代理模式:即Proxy Pattern,常用的设计模式之一.代理模式的主要作用是为其他对象提供一种代理以控制对这个对象的访问. 代理概念 :为某个对象提供一个代理,以控制对这个对象的访问. 代理类和委 ...
- JAVA代理模式与动态代理模式
1.代理模式 所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动.在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之前起到中介的作用.代理模式给某 ...
- java 代理模式一: 静态代理
代理模式: 代理模式的作用:为其他对象提供一种代理以控制对 特定对象 的访问. 某种情况下,一个客户不想或者直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用:通过代理对象引用. ...
- 18 java 代理模式 (转)
静态代理 1.新建一个接口,这个接口所提供的方法是关于数据库操作的 public interface EmployeeDao { public void updateSalary(); } 2.建一个 ...
- JAVA 代理模式(Proxy)
1.代理模式 代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 代理模式一般涉 ...
随机推荐
- SpringBoot额外依赖
spring-boot-configuration-processor <dependency> <groupId>org.springframework.boot</g ...
- Go语言之main包
Go语言的代码通过包(package)组织,包类似于其他语言里的库(libraries)或者模块(modules).一个包由位于单个目录下的一个或多个go源文件组成,目录定义包的作用.每个源文件都以一 ...
- Spring 实例化方式有几种?为什么会用到 Cglib?
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! <Spring 手撸专栏>目录 [x] 第 1 章:开篇介绍,我要带你撸 Spri ...
- Spring框架两大核心机制(IoC、AOP)
IoC(控制反转)/ DI(依赖注入) AOP(面向切面编程) Spring 是一个企业级开发框架,是软件设计层面的框架,优势在于可以将应用程序进行分层,开发者可以自主选择组件. MVC:Struts ...
- CVPR 2020目标跟踪多篇开源论文(上)
CVPR 2020目标跟踪多篇开源论文(上) 1. SiamBAN:面向目标跟踪的Siamese Box自适应网络 作者团队:华侨大学&中科院&哈工大&鹏城实验室&厦门 ...
- Python分析离散心率信号(上)
Python分析离散心率信号(上) 一些理论和背景 心率包含许多有关信息.如果拥有心率传感器和一些数据,那么当然可以购买分析包或尝试一些可用的开源产品,但是并非所有产品都可以满足需求.也是这种情况.那 ...
- 运用iGuard防御ADS权限维持
权限维持是一门庞大的学问,当攻击者在入侵服务器获得主机权限后,往往会想尽办法隐藏其入侵途径以维持权限.权限维持的一般手段包括构造文件包含漏洞.构造远程任意代码执行漏洞.构造SQL注入点.利用系统自启动 ...
- python通过字典实现购物车案例-用户端
import os dict01 = { 'iphone' : { '5999' : { '总部位于美国' : '价格相对较贵', }, }, 'wahaha' : { '15' : { '总部位于中 ...
- Java课程设计-算术运算测试(D级) 齐鲁工业大学 计科20-1 王瀚垠 202003010033
Java课程设计-算术运算测试(D级) 齐鲁工业大学 计科20-1 王瀚垠 202003010033 目录 1.项目简介 2.项目采用技术 3.功能需求分析 4.项目亮点 5.项目功能架构图和UML类 ...
- 配置IPv6公网地址DDNS并开放外网访问端口
目前使用三大运营商宽带服务都会下发公网IPv6地址,这样我们想要在外网访问家里的路由.NAS等设备就可以直接通过IPv6地址来访问了.但是每次重新拨号后IPv6地址都会改变,而且IPv6的地址很长,这 ...