//抽象主題接口類 public interface AbstractSubject{ public void request(); } //真實主題類A public class RealSubjectA implements AbstractSubject{ public void request(){ System.out.println(" RealSubjectA !"); } } //真實主題類B public class RealSubjectB implements AbstractSubject{ public void request(){ System.out.println(" RealSubjectB !"); } } //動態代理類 import java.lang.reflect.*; public class DynamicProxy implements InvocationHandler{ private Object obj; public DynamicProxy(){} public DynamicProxy(Object obj){ this.obj=obj; } public Object invoke(Object proxy,Method method,Object[] args) throws Throwable{ preRequest(); method.invoke(obj,args); postRequest(); return null; } public void preRequest(){ System.out.println(" before Request!"); } public void postRequest(){ System.out.println(" after Request!"); } } //客戶端測試類 import java.lang.reflect.*; public class Client1{ public static void main(String[] args) { InvocationHandler handler =null; AbstractSubject subject = null; handler = new DynamicProxy(new RealSubjectA()); subject = (AbstractSubject)Proxy.newProxyInstance(AbstractSubject.class.getClassLoader(),new Class[]{AbstractSubject.class},handler); subject.request(); System.out.println(" ------------------ !"); handler = new DynamicProxy(new RealSubjectB()); subject = (AbstractSubject)Proxy.newProxyInstance(AbstractSubject.class.getClassLoader(),new Class[]{AbstractSubject.class},handler); subject.request(); } } 結果: before Request! RealSubjectA ! after Request! ------------------ ! before Request! RealSubjectB ! after Request! 新手疑惑:subject是啥?subject.request()後的調用過程是什麼?