Java代理设计模式、静态代理、动态代理

首先代理设计模式是基于接口的。分为静态代理和动态代理。

1.静态代理,darren大神例子,你去银行办卡,肯定有个业务员(业务员就是代理对象)来帮助你,带着你完成办卡这件事情。银行需要走很多手续什么的,你不懂。那么他拿你身份证,走流程他来做,你只需要最后输入密码啊,签字啊什么的。(本身所有的事情都应该你自己完成,但是这样对人来说很不方便。如果改了流程,所有人都得改)


静态代理的好处就是 速度更快、流程上如果发生变化只需要改变代理对象就行

静态代理不好的地方 如果还有办卡、挂失、代取款等等事情,代码量会增加(等会看静态代理就知道了)。

下面上代码:

一、这个接口IBank 就是你去银行要做的事情,假设为办卡和挂失


二、这里的Man表示 需要办业务的人,也就是你,他要办卡或者挂失本身是需要自己去做的,所以这里Man要实现这2个方法。


三、这里的Salesman就表示银行的业务员,首先他帮助你办卡,

1.他自己得知道怎么办,那么他就要实现IBank接口,重写方法。

2.他要帮你办卡那么要获得你的对象(man),

3.然后在进行办卡或者挂失先走一些七七八八的手续(这里的判断非空等)(这一步也就是代理模式的精髓,不管

   是多少个人来办卡,或者挂失。都只需要走这一个流程,而不需要每个Man都执行。比如mvp 场景,在对view

   赋值的时候,可以用代理模式来统一判断非空

)

4.再调用man的办卡或者挂失,(这时候你就输入密码等等事情)


四、这里的client,是入口函数。我们再使用的时候只需要new一个man,再把这个对象传入Saleman的构造。new一个saleMan,再调用saleMan的办卡方法。代理对象就会帮你执行了


这里还举了个例子,对于你叫室友给你带饭这个事情。

本身全部都需要你自己做,现在有了代理。你只需要付钱、室友给你代,中途所有的事情,室友给你处理。

以上就是静态代理。有一个明显的缺点,就是如果要做的事情多了之后,saleMan(代理对象)中“做一些事情”和“完毕”的输出就很多。代码量增加。代理对象越来越大。

这时候就出来动态代理,这里是根据java自带的Proxy代理模板来讲的


详解一下。

1.还是需要new一个Man对象。

2.实例化一个IBank类型的代理对象。需要一些参数

3.代理对象调用办卡、挂失等方法。

重点是 BankInvocationHandler这个类

需要传入你man对象。

这样的模式,每次你调用proxy.xxx方法都会回调 BankInvocationHandler中的invoke方法。

“做一些事情”,和“完毕”这些流程上的东西,都可以在 BankInvocationHandler中输出了。避免了saleMan越来越大




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值