※代理
package inheritate; public interface GrandFather { public String say(String data); } ------------------------------ package inheritate; public class Son implements GrandFather { @Override public String say(String data) { return data; } }
※
※InvocationHandler
public class MyInvocationHandler implements InvocationHandler { private Object obj; @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { return method.invoke(obj, args); } public Object proxy(Object obj) { this.obj = obj; Class<?> objClass = obj.getClass(); return Proxy.newProxyInstance(objClass.getClassLoader(), objClass.getInterfaces(), this); } }
※
※測試
MyInvocationHandler mih = new MyInvocationHandler(); GrandFather gf = (GrandFather) mih.proxy(new Son()); System.out.println(gf.say("xxx"));
※利用InvocationHandler即可完成代理的功能
※工廠模式
package inheritate; public interface GrandFather { public String say(String data); } ------------------------------ package inheritate; public class Son implements GrandFather { @Override public String say(String data) { return data + " 1"; } } ------------------------------ package inheritate; public class SecondSon implements GrandFather { @Override public String say(String data) { return data + " 2"; } }
※
※工廠類
package inheritate; public class ReflecFactory { public static Object getInstance(String className) { try { return Class.forName(className).newInstance(); } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) { e.printStackTrace(); } return null; } }
※
※測試
GrandFather gf1 = (GrandFather) ReflecFactory.getInstance("inheritate.Son"); System.out.println(gf1.say("xxx")); GrandFather gf2 = (GrandFather) ReflecFactory.getInstance("inheritate.SecondSon"); System.out.println(gf2.say("ooo"));
※不管有幾個子類和其他的父子類,工廠類別都不用動
沒有留言:
張貼留言