代理模式之—静态代理
代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象,这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。
被代理对象:可以是 远程对象、创建开销大的对象 或 需要安全控制的对象。
代理模式:分静态代理和动态代理,动态代理又分jdk代理和Cglib代理,而我喜欢直接分成三种。
1.静态代理
2.动态代理
3.Cglib代理
本文主要探讨代理模式中的静态代理模式。
从理论上来说:静态代理在使用时,需要定义接口或者父类,被代理对象(即目标对象)与代理对象一起实现相同的接口或者是继承相同父类。
这样来说是比较绕的,最开始我也没整明白,举个例子就好了:
首先明确我们的目标:
狗狗的肚子饿了,要去吃饭。
正常情况下是有想吃饭的想法,然后到餐桌去坐着,最后吃到骨头。
在这个时候改变需求啦:
狗狗肚子饿了,’需要先去洗手’,然后才能吃饭。(中途可能会有其他奇奇怪怪的要求,比如要洗个澡才能吃饭啦,要叫上哮天犬一起吃饭啦,之类的)
但是“狗狗肚子饿了”和“狗狗吃骨头”是不变的。
我们就可以使用代理模式,来给狗狗实现目标的基础上,增加额外的功能操作,即扩展目标对象的功能。可以新增proxy层(proxy:代理)
如:
这里要注意的是,proxy层的代理和serviceImpl层的类都是实现了service层的接口。所以用户只需要调用代理就行了。
还有点绕的换就来看看代码吧,别的不多说,话都在代码里。
静态代理类代码:
1.主程序/这里也比作controller,代码出发本就从controller开始嘛
public class EatController {