Proxy Pattern
為另一個對象提供一個替身或佔位符以控制這個對象的訪問。
Example: 快取代理
代理模式將類別分為兩類:
分別是 實體類別 (RealSubject) 與 代理類別 (Proxy) 。
代理類別會與實體類別實現相同的介面,
且保存對實體類別的引用。
優點:
控制訪問的職責,不必寫在實體類別。
有了代理類別,可以 延遲實例化 (lazy initialization) 實體類別。
可以有多種控制訪問實體類別的方式。
可以在實體類別被訪問時,做一些額外的事(不屬於實體類別的職責)。
缺點:
程式碼複雜度提高。
回應可能會有所延遲。
與其他模式的比較:
[轉接頭模式]:
轉接頭模式只負責轉化不同介面間的關係。
而代理模式則是實現相同的介面,處理更多訪問相關的職責。
[裝飾者模式]:
裝飾者模式豐富既有行為時,原因較常是來自客戶端。
而代理模式豐富既有行為時,原因較常是來自服務端。
[外觀模式]:
外觀模式的目的是提供簡化接口。
而代理模式的目的則是控制訪問行為。
常見的使用場景:
- 遠端代理:控制訪問遠程對象,利用網路轉發到遠程執行。
- 虛擬代理:控制訪問創建開銷大的對象,待客戶端有請求時才進行實例化。
- 安全代理:控制訪問對象的許可權。
- 智慧代理:處理訪問對象時,不屬於訪問對象的職責。
ʕ •ᴥ•ʔ:當想控制訪問對象時,很可能就是使用代理模式的時機。