Subject
package com.chen.proxy;
/**
*
*/
public interface Subject {
public void shopping();
}
Person
package com.chen.proxy;
/**
* @date 2022/4/16--14:04
*/
public class Person implements Subject{
@Override
public void shopping() {
System.out.println("付款,买到心仪的玩具");
}
}
CreateProxy
package com.chen.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
* @date 2022/4/16--14:07
* 用于动态生成一个代理对象
*/
public class CreateProxy implements InvocationHandler {
private Object target;//被代理的对象
//用于创建代理对象的方法
public Object create(Object target){
this.target = target;
Object proxy = Proxy.newProxyInstance(target.getClass().getClassLoader(),
target.getClass().getInterfaces(),this);
return proxy;
}
/**
* 代理对象要执行的方法
* @param proxy 代理类对象
* @param method 被代理对象的方法
* @param args 被代理对象方法的参数
* @return
* @throws Throwable
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("上海外寻找客户需要的产品...");
System.out.println("跟客户确认物品");
method.invoke(target,args);
System.out.println("完成本次海淘");
return null;
}
}
TestDemo
package com.chen.proxy;
import org.junit.Test;
/**
* @date 2022/4/16--14:25
*/
public class TestDemo {
@Test
public void testProxy(){
//用来创建代理对象的对象
CreateProxy cp = new CreateProxy();
Subject person = new Person();
Subject proxy = (Subject) cp.create(person);
proxy.shopping();//invoke
}
}