代理模式
代理模式(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()
方法。透過代理物件,我們可以控制對原始物件的訪問,並在訪問過程中新增額外的邏輯。
代理模式的關鍵思想是引入一箇中間代理物件,它控制對原始物件的訪問,並在訪問過程中進行控制和增強。代理模式可以實現訪問控制、延遲載入、快取、日誌記錄等功能,同時保持客戶端與原始物件之間的解耦。