首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 代理設計模式深度解析:四大類型、結構與實戰案例

     編輯:Java 相關知識

模式動機

如同現實中的代理商:客戶不直接面對廠商,代理商提供質保、售後、權限控制等增值服務,廠商專注生產。軟件中,代理模式為目標對象提供代理,控制訪問,在不修改原類前提下增強功能(符合開閉原則)。

四大常見代理類型

類型場景例子
遠程代理跨進程/網絡調用RMI Stub、Web Service Proxy
虛擬代理延遲創建昂貴對象大圖片延遲加載、文檔佔位符
保護代理訪問權限控制論壇會員/遊客權限區分
智能引用代理附加額外服務訪問計數、日誌記錄、緩存

適用判斷:系統較小、邏輯簡單時直接修改更高效;功能擴展頻繁、需解耦時代理模式優勢明顯。

結構角色

  1. 抽象主題:聲明共同接口(接口或抽象類)。
  2. 真實主題:實現核心業務邏輯。
  3. 代理主題:持有真實主題引用,實現同一接口,在調用前後織入邏輯。

代理模式類圖

實戰案例一:論壇發帖權限控制(保護代理)

// 抽象主題
public interface MyForum { void addPost(); }

// 真實主題
public class RealMyForum implements MyForum {
    public void addPost() { System.out.println("發帖成功!"); }
}

// 代理主題
public class MyForumProxy implements MyForum {
    private RealMyForum real = new RealMyForum();
    private int permission; // 0:遊客 1:會員
    public MyForumProxy(int permission) { this.permission = permission; }
    public void addPost() {
        if (permission == 1) real.addPost();
        else System.out.println("請先註冊成為會員!");
    }
}

可擴展:統計瀏覽量、記錄登錄日誌等(智能引用)。

實戰案例二:大圖片延遲加載(虛擬代理)

瀏覽器訪問網頁時,代理先用線程加載縮略圖顯示;後台另一線程加載原圖並緩存至本地;用戶點擊時若原圖就緒則新頁顯示,否則顯示「加載中」。
核心價值:將耗時操作移至後台,不阻塞前台渲染,提升用戶體驗。

總結

代理模式協調調用者與被調用者,降低耦合。但需謹記適用條件:需對原有方法增強/控制,且不願修改原類。濫用會導致類爆炸、調用鏈過長,得不償失。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved