10.19

liuxuechao發表於2024-11-20

代理模式

代理模式(Proxy Pattern)是一種結構型設計模式,它提供了一個代理物件,控制對原始物件的訪問,並允許在訪問過程中新增額外的邏輯。

下面是一個簡單的Java程式碼示例,演示了代理模式的實現

// 介面定義
interface Subject {
    void request();
}

// 原始物件類
class RealSubject implements Subject {
    @Override
    public void request() {
        System.out.println("RealSubject request");
    }
}

// 代理物件類
class Proxy implements Subject {
    private RealSubject realSubject;

    public Proxy() {
        realSubject = new RealSubject();
    }

    @Override
    public void request() {
        // 在呼叫原始物件之前或之後執行額外的邏輯
        System.out.println("Proxy pre-processing");
        
        // 呼叫原始物件的方法
        realSubject.request();
        
        // 在呼叫原始物件之前或之後執行額外的邏輯
        System.out.println("Proxy post-processing");
    }
}

// 客戶端程式碼
public class ProxyPatternExample {
    public static void main(String[] args) {
        Proxy proxy = new Proxy();
        proxy.request();
    }
}

在上述示例中,我們定義了一個介面 Subject,其中包含一個 request() 方法。

然後,我們實現了原始物件類 RealSubject,它實現了 Subject 介面中的方法。

接著,我們建立了代理物件類 Proxy,它也實現了 Subject 介面,並在內部維護了一個對原始物件的引用。

在代理物件的 request() 方法中,我們可以在呼叫原始物件之前或之後執行額外的邏輯。在本例中,我們在呼叫原始物件之前輸出一條前置資訊,在呼叫原始物件之後輸出一條後置資訊。

在客戶端程式碼中,我們例項化了代理物件 Proxy,並呼叫了其 request() 方法。透過代理物件,我們可以控制對原始物件的訪問,並在訪問過程中新增額外的邏輯。

代理模式的關鍵思想是引入一箇中間代理物件,它控制對原始物件的訪問,並在訪問過程中進行控制和增強。代理模式可以實現訪問控制、延遲載入、快取、日誌記錄等功能,同時保持客戶端與原始物件之間的解耦。