為某物件提供一個代理,由代理控制對原物件的引用。英文 Proxy 或 Surrogate,中文均譯「代理」。
客戶端不想/無法直接引用目標物件時,代理在中間起**中介作用**。
| 類型 | 說明 |
|---|---|
| 遠程代理 | 不同位址空間物件的本地代表(本機或跨機器) |
| 虛擬代理 | 按需創建資源消耗大的物件 |
| Copy-on-Write | 虛擬代理變體,延遲複製/克隆 |
| 保護代理 | 控制存取權限,不同用戶不同等級 |
| Cache 代理 | 暫存目標操作結果,多客戶端共享 |
| 防火牆代理 | 保護目標,阻擋惡意訪問 |
| 同步化代理 | 多執行緒安全訪問單一物件 |
| 智能引用代理 | 引用時執行額外操作(計數、日志等) |

| 角色 | 職責 |
|---|---|
| 抽象主題 | 宣告真實主題與代理共同介面,客戶端面向此介面程式設計 |
| 代理主題 | 持有真實主題引用;實作共同介面;控制真實主題創建/銷毀;調用前後執行額外操作 |
| 真實主題 | 定義代理所代表的真實物件與核心業務邏輯 |
代理**不只是單純轉發**,而是在轉發前後執行額外邏輯(延遲初始化、權限檢查、日志、快取等),這是與單純包裝器的本質區別。