大话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.代理模式 代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 代理模式一般涉 ...
随机推荐
- VMware(Caps Lock键)切换大小写作用失效的Bug的解决办法
前言 第一种情况是:进入VMware虚拟机的时候,即使按了Capslock键开启大写,灯虽然亮了,但是,打出来的字母还是小写,没有有任何的效果,根本不能转换成大写. 只有按Shift+字母才能输入大写 ...
- Linux_配置辅助DNS服务(基础)
[RHEL8]-DNSserver1:[RHEL7]-DNSserver2:[Centos7]-DNSclient !!!测试环境我们首关闭防火墙和selinux(DNSserver1.DNSserv ...
- MySQL 查询操作
目录 基本语法 查询常量 查看表达式 查询函数 查询指定字段 查询所有列 列别名 表别名 条件查询 条件查询运算符 逻辑查询运算符 排序与分页 排序查询(order by) 排序方式 limit 分组 ...
- 037.Python的UDP语法
UDP语法 1 创建一个socket的UDP对象 import socket #创建对象 socket.SOCK_DGRAM 代表UDP协议 sk = socket.socket(type=socke ...
- docker命令补全
安装docker自带包: source /usr/share/bash-completion/completions/docker 缺少下面的包,TAB会报错 yum install -y bash- ...
- shell应用之cobbler批量部署
如果使用的是原始源,可直接使用该脚本,如果是用的其它源且有cobbler安装包的可删除脚本中的配置yum源步骤.批量部署使用的软件有:cobbler dhcp httpd tftp-server xi ...
- Centos7.4 file '/grub/i386-pc/normal.mod' not found,实际为/boot下所有文件丢失
注:如果服务器特别重要,此方案慎用.如果没有其他方案解决,可以使用该方案 事件:搭建在云计算管理平台CAS上的 Centos7.4 虚拟机在一次断电后,启动虚拟机出现file '/grub/i386- ...
- flink-cdc读取postgres报异常,没有发布表
异常信息 must be superuser to create FOR ALL TABLES publication 必须是超级用户才能为所有发布表创建 网上搜索了一天,都毫无头绪,后面搜索到了一个 ...
- HTML 标签隐藏占用空间与不占用空间(Day_29)
老是有些忘记或者搞混淆,今天写篇博客. 隐藏占用空间: 将标签的属性设置为: visibility:hidden; <input id="modifId" type=&quo ...
- CefSharp如何进行页面的缩放(即Ctrl+滚轮)
问题:CefSharp如何进行页面的缩放 摘要:由于CefSharp并没有提供鼠标滚轮事件.只有一个KeyboardHandler事件,因此只能接收到键盘事件. 环境:CefShap.Wpf 了解Ce ...