一、什么是代理

首先理解一下什么是代理。简单来说,代理就你要做一件事情,我替你把事情做了。这是现实生活中我们遇到的代理的需求场景。但写代码的时候对代理场景的需求,跟现实场景有点区别,本质上还是帮你做事(调用要执行的方法),但在代码世界里,如果仅仅只是把要调用的方法执行了,那完全没有必要再新建类(代理类)去执行,因此,编码的代理场景,更多体现在,我不但要替你把原本先做的事情(调用方法)做了,我还要把你不需要做、或不想做的事情给做了,我们称其为方法的增强。

二、代理方式

众所周知,java里面的代理模式分为静态代理和动态代理两种方式。那如何理解这两种代理方式呢?以前我总认为这两种方式是对立的,这给我的理解带来不小的阻碍。其实不然,后来我才发现,它们并不对立,而是解决编码的过程中代理的两种不同场景而已。

前面我们提到,编码的代理需求,更多体现在于方法的增强。围绕这个核心,有利于我们更好的理解两者的异同。

  • 静态代理

首先我们举一个静态代理的使用场景,有利于我们更好的理解。我始终相信每一项技术的发展,都是来着现实生活的推动。因此我们可以找一个现实场景进行类比。

比如近两年的新冠疫情。在此插一句,祝人类早日战胜疫情,早日摆脱口罩的束缚,早日自由畅快地呼吸。提到战胜疫情,就不得不提到疫苗,人类想战胜疫情,目前最好的方式就是疫苗的研发。那疫苗跟我们代理有啥关系呢?

我们都知道,疫苗在研发处理的初期,都是比较紧缺的,所以在初期,对疫苗的使用,肯定是先给最需要的人先使用。比如先给一线医护人员使用。那打疫苗就得报名,她们还被告知是手动填表报名,可能我们的没了的医护天使在一线抗战都非常忙,没有时间报名,那这个时候有个小聪明就想,我也要为疫情抗战出一份力,我没法到一线工作,我只是能帮一线医护人员报名,帮他们代理报名。这时候,一线医护人员是一个特定的群体(对应我们的类),手动填表报名是一个要被代理的特定动作(一个方法),小聪明(代理类)代理报名。

为特定的类,固化的方法代理,我们称之为静态代理,是对原有业务逻辑的扩充。小聪明很明确,他要为一线医护天使报名打疫苗,并处理一些杂七杂八的事情,不耽误他们的工作。

  • 动态代理

后来随着疫苗生产的加速推进,疫苗越来越多。对越来越多的群体开放,学生想报名,工人想报名,画家想报名,程序员也想报名的,叫不上名的人都想报名。这时原先的手动填表已经满足不了需求了。需求,没错,就是需求推动社会的进步,技术的发展。这时政府相关机构会开发通道,让更多有能力的人或机构来帮忙解决报名的事情。你会看到,现在琳琅满目的报名方式:网站报名,社区报名,小程序报名,各式各样的报名方式被开发出来,只为一件事,就是报名。

对应我们的编程,其实的就是写一个接口,报名渠道,比如说小程序,开放报名通道就是接口里面提供报名的方法,不断增加的各类群体都想通过小程序报名,是对接口方法的实现,小程序不断的完善自己对各类群体的报名支持,我们可以理解为动态生成代理类。然后小程序完成报名,就是对人们报名需求的代理。通过这些代理进行报名,可以快速获上交材料,获得报名资格,这是对方法的增强。

  • 区别

可以看到,静态代理和动态代理都提到了方法的增强,这是我们一直强调的代理的场景。那他们有什么不同呢。从上面例子不难理解,动态代理是为了解决静态代理的局限性而产生的。静态代理是对类里特定方法的增强,而动态代理是对接口的里方法的增强,只要实现该接口的类,都能实现方法的增强。由于实现接口的方法可以有无数个类,所以才有了动态代理的需求

大话Java代理模式的更多相关文章

  1. Java代理模式

    java代理模式及动态代理类 1.      代理模式 代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目 ...

  2. Java代理模式示例程序

    Java代理模式示例程序 当然不是我想出来的,是我看的一个网上教程里的. 模拟的是一个对电脑公司的代理 真实类的接口: public interface SaleComputer { public S ...

  3. java 代理模式 总结

    1.前言 最近舍友去面试遇到了关于java代理模式的问题. 我虽然知道怎么使用,但是没有做过正经的总结,因此有了这篇随笔,好好总结一下三大代理模式底层原理. 事实上,在开发项目的时候,基本用不上代理, ...

  4. 浅谈java代理模式

    讲解java代理模式 目录 讲解java代理模式 何谓代理模式 静态代理 动态代理 JDK动态代理 CGLIB动态代理 何谓代理模式 代理模式,即Proxy Pattern,23种java常用设计模式 ...

  5. Java代理模式/静态代理/动态代理

    代理模式:即Proxy Pattern,常用的设计模式之一.代理模式的主要作用是为其他对象提供一种代理以控制对这个对象的访问. 代理概念 :为某个对象提供一个代理,以控制对这个对象的访问. 代理类和委 ...

  6. JAVA代理模式与动态代理模式

    1.代理模式 所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动.在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之前起到中介的作用.代理模式给某 ...

  7. java 代理模式一: 静态代理

    代理模式: 代理模式的作用:为其他对象提供一种代理以控制对 特定对象  的访问. 某种情况下,一个客户不想或者直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用:通过代理对象引用. ...

  8. 18 java 代理模式 (转)

    静态代理 1.新建一个接口,这个接口所提供的方法是关于数据库操作的 public interface EmployeeDao { public void updateSalary(); } 2.建一个 ...

  9. JAVA 代理模式(Proxy)

    1.代理模式 代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 代理模式一般涉 ...

随机推荐

  1. 运维常用shell脚本一(系统指标巡检、自动创建用户、跳板机)

    一.系统指标巡检脚本 #!/bin/bash menu(){ cat <<EOF +---------------------------------------------+ | 日常巡 ...

  2. 030. Python装饰器

    一  装饰器 1.1 装饰器介绍 扩展函数新功能的@定义:替换旧函数,返回新函数,在不改变原有代码的前提下,为该函数扩展新功能;语法:@ (语法糖) 1.2 装饰器的原型 def show(func) ...

  3. Linux进阶之TCP三次握手四次挥手

    TCP(Transfer control protocol)传输控制协议 一.两种传输模式: TCP面向有连接 可靠 常用于点对点 微信 UDP面向无连接 高速 常用于点对面 直播 二.数据方向: 在 ...

  4. linux中级之HAProxy基础配置

    一.haproxy简介 HAProxy是一款提供高可用性.负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,HAProxy是完全免费的.借助HAProxy可以快速并且可靠的提供基于T ...

  5. 国外DIY网站

    https://site.douban.com/109950/widget/notes/250072/note/248811721/

  6. 给MySQL数据表加入uuid

    alter table table_name add column uuid VARCHAR(255) default "0" update table_name set uuid ...

  7. modelMapper使用,将数据库查询对象直接转成DTO对象

    1.pom引入 <dependency> <groupId>org.modelmapper</groupId> <artifactId>modelmap ...

  8. 干货:ANR日志分析全面解析

    一.概述 解决ANR一直是Android 开发者需要掌握的重要技巧,一般从三个方面着手. 开发阶段:通过工具检查各个方法的耗时,卡顿情况,发现一处修改一处. 线上阶段:这个阶段主要依靠监控工具发现AN ...

  9. Lidar激光雷达与Radar雷达

    Lidar激光雷达与Radar雷达 自动驾驶技术正迅速成为汽车工业的驱动力.来自全球的汽车制造商正在与Google等顶级高科技巨头以及其他知名初创公司合作,共同开发下一代自动驾驶汽车.中国也开辟了自动 ...

  10. 如何为嵌入式应用选择适当的SSD

    如何为嵌入式应用选择适当的SSD Selecting the right SSD for evolving embedded applications 变革涉及技术的每一个要素,闪存也不例外.价格下跌 ...