package com.base.proxy;
/**
* 一个定义功能的接口
*/
public interface Star {
String sing(String name);
String dance(String name);
}
package com.base.proxy;
/**
* 实现接口的功能类
*/
public class LDH implements Star {
@Override
public String sing(String name) {
// TODO Auto-generated method stub
return "大家好,接下来我要演唱"+name+"...谢谢观看";
}
@Override
public String dance(String name) {
// TODO Auto-generated method stub
return "大家好,接下来我要跳"+name+"...谢谢观看";
}
}
package com.base.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
* 创建生成代理对象的代理类
*/
public class LDHProxy {
//要代理的对象
private Star ldh = new LDH();
/**
* 生成代理类对象的方法
*/
public Star getProxy(){
//返回一个代理对象
return (Star)Proxy.newProxyInstance(LDHProxy.class.getClassLoader(), ldh.getClass().getInterfaces(),
new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// TODO Auto-generated method stub
if( method.getName().equals("sing") ){
System.out.println("我是代理类");
return method.invoke(ldh, args);
}
if( method.getName().equals("dance") ){
System.out.println("我是代理类");
return method.invoke(ldh, args);
}
return null;
}
}
);
}
}
package com.base.proxy;
public class TestProxy {
public static void main(String[] args) {
//创建一个代理类,该代理类
LDHProxy ldhProxy = new LDHProxy();
//返回一个代理对象
Star star = ldhProxy.getProxy();
//访问代理对象的方法自动调用代理对象的invoke方法
String str1 = star.dance("广场舞");
System.out.println(str1);
//访问代理对象的方法自动调用代理对象的invoke方法
String str2 = star.sing("卡路里");
System.out.println(str2);
}
}