Java代理模式的示例詳解
定義
代理模式(Proxy Parttern) 為一個對象提供一個替身,來控制這個對象的訪問,即通過代理對象來訪問目標對象,這樣做的話好處是可以在目標對象實現的基礎上,進行額外的功能的擴展。
案例
需求
蘋果公司通過蘋果代理商來賣手機
方案:靜態代理模式
定義抽象接口類,該類在代理模式中扮演的是一個抽象功能的角色,該案例中就是把出售手機抽象為瞭一個接口
/** * 售賣手機的接口(代理模式——抽象角色) * @author:liyajie * @createTime:2022/2/22 14:42 * @version:1.0 */ public interface IPhone { /** * 出售手機 * @author: liyajie * @date: 2022/2/22 14:44 * @param * @return void * @exception: * @update: * @updatePerson: **/ void sellPhone(); }
定義蘋果手機公司類,該類在代理模式中扮演的是一個目標角色,實現瞭IPhone接口,重寫出售手機的方法
/** * 蘋果公司(代理模式——目標角色) * @author:liyajie * @createTime:2022/2/22 14:46 * @version:1.0 */ public class TargetPhone implements IPhone { @Override public void sellPhone() { System.out.println("蘋果公司正在出售手機"); } }
定義代理類,通過代理類進而調用目標類的出售手機的方法,並加上自己的擴展功能
/** * 代理商(代理模式——代理角色) * @author:liyajie * @createTime:2022/2/22 14:50 * @version:1.0 */ public class ProxyPhone implements IPhone { private IPhone iPhone; public ProxyPhone(IPhone iPhone){ this.iPhone = iPhone; } @Override public void sellPhone() { System.out.println("代理商正在循環播放廣告,賺取廣告商廣告費"); System.out.println("代理商正在推薦自己的電子周邊產品,賺取費用"); iPhone.sellPhone(); System.out.println("代理商正在賣出蘋果手機,賺取差價"); } }
代理商賺錢的奧秘盡在下圖紅框中,賣出瞭蘋果手機賺錢,賣出瞭其他東西賺錢,廣告費也賺錢
定義測試類
/** * 測試類 * @author:liyajie * @createTime:2022/2/22 14:55 * @version:1.0 */ public class Test { public static void main(String[] args) { TargetPhone targetPhone = new TargetPhone(); ProxyPhone proxyPhone = new ProxyPhone(targetPhone); proxyPhone.sellPhone(); } }
查看結果
總結
該方案采用瞭靜態代理的方式:
優勢:可以在不改變目標對象功能的前提下,通過代理對象對目標對象功能進行擴展
劣勢:不利於程序的擴展,需要同時維護目標對象和代理對象,程序中會產生大量的代理類,維護成本高
到此這篇關於Java代理模式的示例詳解的文章就介紹到這瞭,更多相關Java代理模式內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!