JAVA动态&静态代理详解

Java的代理模式有两种,分别为”静态代理“和”动态代理“。在了解静态代理和动态代理之前,我们有必要先了解一下什么是代理,以及使用代理模式的好处。

一.什么是代理?

代理就类似于现实生活中的租房中介,房东不想直接面对租房的客户,处理那些比如谈租金和签合同这些乱七八糟的事情,于是就委托第三方中介来代理他来面对租客,然后中介根据房东的要求代房东和租房顾客谈租房相关事宜,这就是代理,代理谁?来帮他(她)做什么事情。

关系图:

 

二.动态代理

       动态代理的出现是为了弥补静态代理“每写一个真实角色就要写一个与它相当应的一个代理角色,如果在真实角色很多的情况下,那么就要写很多相对应的代理角色,这样代码量就会翻倍,就会导致开发效率变得极低”的缺点,静态代理的优点,动态代理都具备,反之相反,所以我们要把关注点重点放在动态代理身上。

1、使用动态代理的好处

1)、可以使真实角色的操作更加纯粹,不用再去关注一些公共的业务。

2)、公共的业务可以交给代理角色去完成,实现了业务的分工,使分工关系更加明朗。

3)、公共业务发生扩展的时候,方便集中管理,大大降低了代码的耦合度。

4)、不用去更改原有的业务代码,就可方便的在原有的业务代码中扩展加入新的功能。

5)、一个动态代理类代理的是一个接口,一般就是对应的一类业务。

6)、一个动态代理类可以代理多个类,只要是实现了同一个接口即可。

 2、代码(程序)举例

我们以”用户“这个实现类来举例,控制台显示该类的”增删改查“的执行方法名称!!!

1)、接口(抽象角色)

2)、实现类(真实角色(对象))

 

        需求:现在,有这样一个需求,要求在实现类里面的每一个方法上面,添加一句实现了该方法相对应的方法名称,例如,程序调用了add方法,那么就要求控制台要打印出,”执行了add方法“,程序调用了delect方法,控制台就要打印出,”执行了delect方法“ 等,与方法名与之对应的话,那么应该如何去做?去实现类的方法上面一个一个的去手动添加吗?如果方法数量少还好,那要是程序里面有一千个、一万个方法呢?你还用手动的去一个一个的添加吗?

解决方法:使用动态代理,智能匹配执行方法与控制台打印输出执行了什么方法的需求。

 3)、代理角色

 

4)、测试、调用程序

 

总结:动态代理是程序开发中经常使用,也是非常重要的一种设计模式,能帮助开发人员更好、更高效、更安全的开发程序。静态代理简单了解一下,知道有这么一个概念即可,实际开发中用得并不多,关注点应该重点放在动态代理身上。 

三.静态代理

简单的demo:

这里我们构建一个在京东(代理对象)买实体厂家(目标对象)空调的场景。

 

如果此时我感觉格力和海尔的空调太贵了不适合我,我想买个奥克斯的(新需求),此时我们能快速的进行扩展。

 

 再说一个真实场景帮助大家理解,当我们进行Android开发时会用到网络请求框架,比如最早使用的是Volley框架,之后我想换成okhttp框架,如果之前是强关联(即在业务代码中直接引用Volley),想要做框架替换无疑是痛苦的,如果在设计之初,我们写了一个代理层则可以快速进行框架转换,哪怕将来要求替换为Retrofit也会毫不费力,代理模式可以增强我们代码的扩展性。

静态代理的缺点

  1. 静态代理会导致类和接口泛滥,难以管理
  2. 如需对接口进行改动,那么所有实现类都要改动

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值