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

Java 靜態代理模式深度解析:結構、實現與積木式擴展

     編輯:Java 綜合教學

代理模式核心定義

「為其他對象提供一種代理以控制對這個對象的訪問。」—— GoF《設計模式》

核心角色:

  • Subject(抽象主題):定義真實主題與代理的共同介面。
  • RealSubject(真實主題):核心業務邏輯實現者。
  • Proxy(代理):持有真實主題引用,控制存取,可在前後添加橫切邏輯。

靜態代理:編譯期確定代理關係

代理類由程式設計師建立或工具生成,.class 檔案編譯期即存在。結構清晰、無反射開銷,但一個真實主題對應一個代理類,擴展性受限。

UML 結構

Subject (介面)
    ▲
    ├──────────────────┐
    │                  │
RealSubject         Proxy
(核心業務)          (增強+委託)

標準實現代碼

// 1. 抽象主題
public interface Subject {
    void operation();
}

// 2. 真實主題
public class RealSubject implements Subject {
    @Override
    public void operation() {
        System.out.println("執行核心業務邏輯...");
    }
}

// 3. 靜態代理
public class Proxy implements Subject {
    private final Subject realSubject; // 組合而非繼承

    public Proxy(Subject realSubject) {
        this.realSubject = realSubject;
    }

    @Override
    public void operation() {
        preProcess();           // 前置增強:日誌、權限、計時、快取
        realSubject.operation(); // 委託真實主題
        postProcess();          // 後置增強:結果包裝、指標上報、資源釋放
    }

    private void preProcess() { System.out.println("[Proxy] 前置處理:權限校驗、記錄入參"); }
    private void postProcess() { System.out.println("[Proxy] 後置處理:耗時統計、返回值脫敏"); }
}

// 4. 客戶端使用
public class Client {
    public static void main(String[] args) {
        Subject real = new RealSubject();
        Subject proxy = new Proxy(real);
        proxy.operation(); // 透過代理間接呼叫
    }
}

靜態代理的「積木式」擴展策略

雖然靜態代理類爆炸,但可透過組合與介面分離構建可復用的代理積木:

1. 功能單一的代理積木


2. 客戶端靈活組裝(裝飾器模式變體)

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