設計模式--代理模式
阿新 • • 發佈:2021-12-14
類圖
原始碼
(1) Customer.java package proxytest; public class Customer implements Person{ public void findLove(){ System.out.println("高富帥"); System.out.println("身高180cm"); System.out.println("有6塊腹肌"); System.out.println("未滿18歲"); } } (2) JDKMeipo.java packageproxytest; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class JDKMeipo implements InvocationHandler{ // 被代理的物件,把引用儲存下來 private Object target; public Object getInstance(Object target) throws Exception{ this.target = target; Class<?> clazz = target.getClass(); return Proxy.newProxyInstance(clazz.getClassLoader(),clazz.getInterfaces(),this); } public Object invoke( Object proxy, Method method, Object[] args ) throws Throwable{ before(); Object obj = method.invoke(this.target,args); after(); return obj; } private void before(){ System.out.println("我是媒婆:我給你找物件,現在已經確認你的需求"); System.out.println("開始物色"); } private void after(){ System.out.println("未滿18歲,對不起不能早戀!!"); } } (3) Person.java package proxytest; public interface Person { public void findLove(); } (4) Test.java package proxytest; public class Test { public static void main(String[] args){ try { Person obj = (Person)new JDKMeipo().getInstance(new Customer()); obj.findLove(); } catch (Exception e) { e.printStackTrace(); } } }