class DynamicAgent {
public static void main(String[] args) {
SuperMan superMan = new SuperMan();
Human objectProxy = (Human) Factory.getObjectProxy(superMan);
String believe = objectProxy.believe();
System.out.println(believe);
objectProxy.eat("汉堡");
}
}
//功能接口
interface Human{
void eat(String s);
String believe();
}
//被代理类
class SuperMan implements Human{
@Override
public void eat(String s) {
System.out.println("我喜欢吃"+s);
}
@Override
public String believe() {
return "我相信自己的能力将给人们带来幸福";
}
}
//代理工厂类
class Factory{
private static Object object;
public static Object getObjectProxy(Object obj){
object=obj;
//创建模板接口的实现类
MyInvocationHandler myHandler = new MyInvocationHandler(obj);
//返回代理类的对象
return Proxy.newProxyInstance(object.getClass().getClassLoader(),object.getClass().getInterfaces(),myHandler);
}
}
//代理方法模板
class MyInvocationHandler implements InvocationHandler{
private Object object;
public MyInvocationHandler(Object object) {
this.object = object;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object invoke = method.invoke(object, args);//调用被代理类的同名同参数的方法
return invoke;//方法返回值
}
}
运行结果