America.java
Chinese.java
Hybrid.java
MyInvocationHandler.java
Teacher.java
output:
I'm speaking English
I'm speaking Chinese
package com.myproject.proxy;
public interface America {
public String speakEnglish();
}
Chinese.java
package com.myproject.proxy;
public interface Chinese {
public String speakChinese();
}
Hybrid.java
package com.myproject.proxy;
public class Hybrid implements Chinese, America{
public String speakEnglish() {
return "I'm speaking Chinese";
}
public String speakChinese() {
return "I'm speaking English";
}
}
MyInvocationHandler.java
package com.myproject.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class MyInvocationHandler implements InvocationHandler{
private Object obj;
public MyInvocationHandler(Object object){
this.obj = object;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
return method.invoke(obj, args);
}
}
Teacher.java
package com.myproject.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
public class Teacher {
public static void main(String[] args){
Hybrid hybrid = new Hybrid();
InvocationHandler handler = new MyInvocationHandler(hybrid);
Chinese chinese = (Chinese)Proxy.newProxyInstance(Chinese.class.getClassLoader(), new Class[]{Chinese.class}, handler);
System.out.println(chinese.speakChinese());
America america = (America)Proxy.newProxyInstance(hybrid.getClass().getClassLoader(), (Class[])(hybrid.getClass().getInterfaces()), handler);
System.out.println(america.speakEnglish());
}
}
output:
I'm speaking English
I'm speaking Chinese