动态代理
代理模式概念实现方式动态实现步骤增强方式实例
代理模式概念
真实对象: 被代理的对象代理对象代理了模式: 代理对象代理真实对象, 达到增强真实对象功能的目的
实现方式
静态代理: 有一个类文件描述代理模式动态代理: 在内存中形成代理类
动态实现步骤
代理对象和真实对象实现相同的接口代理对象 = Proxy.newProxyInstance;使用代理对象调用方法增强方法
增强方式
增强参数列表增强返回值类型增强方法体执行逻辑
实例
package cn
.proxydemo
;
import java
.lang
.reflect
.InvocationHandler
;
import java
.lang
.reflect
.Method
;
import java
.lang
.reflect
.Proxy
;
public class ProxyTest {
public static void main(String
[] args
) {
final Lenovo lenovo
= new Lenovo();
SaleComputer proxy_lenovo
=(SaleComputer
) Proxy
.newProxyInstance(lenovo
.getClass().getClassLoader(), lenovo
.getClass().getInterfaces(),
new InvocationHandler() {
@Override
public Object
invoke(Object proxy
, Method method
, Object
[] args
) throws Throwable
{
if (method
.getName().equals("sale")) {
double money
= (double) args
[0];
money
= money
* 0.85;
System
.out
.println("专车接送");
String obj
= (String
) method
.invoke(lenovo
, money
);
System
.out
.println("免费送货");
return obj
+"+鼠标垫";
} else {
Object obj
= method
.invoke(lenovo
, args
);
return obj
;
}
}
});
String computer
= proxy_lenovo
.sale(8000);
System
.out
.println(computer
);
proxy_lenovo
.show();
}
}
输出结果:
专车接送
花了6800.0元买了一台联想电脑
免费送货
联想电脑+鼠标垫
展示电脑......