设计模式之动态代理
什么是动态代理呢?

比如联想公司是有两个业务,一个是生产电脑一个是买电脑,那么联想公司就是一个真实对象,那如果我们有一个客户在西安去买联想的电脑,但是联想的公司在北京那么怎么办呢?
此时联想可以有个代理商,代理商去代理销售联想的电脑,那么代理商就是一个代理对象

1. 创建接口

2.创建真实对象类实现接口

3.创建代理测试类

但是呢我们要的不是普通的对象调用方法,我们要用的是动态代理增强Lenovo对象

上面的newProxyInstance有三个参数,第一个参数是类加载器,需要代理哪个对象就写哪个对象的类加载器,第二个参数是真是对象的接口数组,第三个参数是处理器。
Proxy.newProxyInstance返回的是个对象Object但是呢真实对象和代理对象实现的是同一个接口,所以我们可以强转。

强转后的接口就和lenovo这个接口实现的是同一个接口了。
无论调用了哪个方法invoke()方法都会在方法之前执行。


那么怎么去增强对象呢?我们的代理商本身并不具有卖电脑的功能,其实是增强联想买电脑的功能,这就是增强真实对象。

使用真实对象调用方法:
这里的method对象是sale(),真实对象是lenovo,使用真实对象调用方法,然后传递参数,如果返回值为null,则sale(null)方法形参为null,那么输出是个null.如果返回obj则返回一个对象执行真实对象的方法并输出sale()方法返回的computer。



这里的增强参数可以这么理解,用户花8000元买一个电脑,代理商如果从联想公司进货也是8000,那么代理商是不赚钱的,所以我们可以增强参数,使代理商能赚到钱。
增强返回值能就是用户8000元去买一台电脑,代理商转了1000多,用户心里很不爽,增强返回值就是在输出一个电脑的基础上再送一个鼠标垫。
增强方法逻辑就是在买电脑之前和之后的加上的一些操作。

浙公网安备 33010602011771号