剛學習完Java SE,不知道怎麼寫項目?不知道寫什麼項目?本篇文章將線上ATM詳細架構設計分享出來,幫助初學者開發項目。 ...
轉自:
http://www.java265.com/JavaCourse/202204/2997.html
下文筆者將講述Java設計模式之代理模式,如下所示
代理模式簡介
我們將採用間接的方式調用對象的模式稱之為“代理模式”
代理模式的分類
代理模式分為: 靜態代理類 動態代理類
靜態代理
package com.java265.other; public class Test16 { /** * java265.com 示常式序 */ public static void main(String... args) { ChaZuo chaZuo = new ProxyChaZuo(new MeiGuiChaZuo()); chaZuo.chaDian(); } } interface ChaZuo { void chaDian(); } class MeiGuiChaZuo implements ChaZuo { @Override public void chaDian() { System.out.println("我是一個美規插座"); } } class ZhongGuiChaZuo implements ChaZuo { @Override public void chaDian() { System.out.println("我是一個中國插座"); } } /* 定義一個代理類 */ class ProxyChaZuo implements ChaZuo { private ChaZuo chaZuo; public ProxyChaZuo(ChaZuo chaZuo) { this.chaZuo = chaZuo; } @Override public void chaDian() { chaZuo.chaDian(); } } -----運行以上代碼,將輸出以下信息------ 我是一個美規插座
動態代理
只需實現一個InvocationHandler介面 並重寫invoke方法即可
例:
package com.java265.other; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class Test16 { /** * java265.com 示常式序 */ public static void main(String... args) { MeiGuiChaZuo meiGuiChaZuo = new MeiGuiChaZuo(); DynamicProxy dpy = new DynamicProxy(); ChaZuo chaZuo = (ChaZuo) dpy.proxyObj(meiGuiChaZuo); chaZuo.chaDian(); } } /* * 定義一個動態代理類 */ class DynamicProxy implements InvocationHandler { Object obj; public Object proxyObj(Object obj) { this.obj = obj; return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this); } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object res = method.invoke(obj, args); return res; } } interface ChaZuo { void chaDian(); } class MeiGuiChaZuo implements ChaZuo { @Override public void chaDian() { System.out.println("我是一個美規插座"); } } class ZhongGuiChaZuo implements ChaZuo { @Override public void chaDian() { System.out.println("我是一個中國插座"); } } /* 定義一個代理類 */ class ProxyChaZuo implements ChaZuo { private ChaZuo chaZuo; public ProxyChaZuo(ChaZuo chaZuo) { this.chaZuo = chaZuo; } @Override public void chaDian() { chaZuo.chaDian(); } }