动态代理的核心
被代理类和代理共同实现同一个接口
/**
* 明星接口
**/
public interface Start {
void sing();
}
public class RealStart implements Start {
@Override
public void sing() {
System.out.println("周杰伦唱青花瓷!");
}
}
package com.design.pattern.factory.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class PoxyHandle implements InvocationHandler {
private Object obj;
public PoxyHandle(Object obj) {
super();
this.obj = obj;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object object = null;
System.out.println("真正的方法执行前!");
System.out.println("面谈,签合同,预付款,订机票");
if(method.getName().equals("sing")){
object = method.invoke(obj, args);
}
System.out.println("真正的方法执行后!");
System.out.println("收尾款");
return object;
}
}
package com.design.pattern.factory.proxy;
import java.lang.reflect.Proxy;
public class Client {
public static void main(String[] args) {
Start realStar = new RealStart();
PoxyHandle handler = new PoxyHandle(realStar);
Start proxy = (Start) Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(),
new Class[]{Start.class}, handler);
proxy.sing();
}
}
真正的方法执行前!
面谈,签合同,预付款,订机票
周杰伦唱青花瓷!
真正的方法执行后!
收尾款