程式碼結構:
Fun 介面(抽象主題)RealFun 真實主題DelegateFun 代理,持有 RealFun* 並在 func() 中轉呼叫並加入日誌結論:符合代理模式結構,但使用場景不當——針對一個全域函數套用代理屬於「畫蛇添足」。
經典案例:RPC(遠端程序呼叫)客戶端 Stub
fun() 執行在伺服器,客戶端無法直接呼叫。fun():序列化參數 → 發送網路請求 → 等待回應 → 反序列化結果 → 返回。其他常見場景:虛擬代理(延遲載入大圖片)、保護代理(權限檢查)、快取代理(記憶體/磁碟快取)、智慧指標(引用計數)。
「為其他物件提供一種代理以控制對這個物件的存取。在某些情況下,一個物件不適合或不能直接引用另一個物件,而代理物件可以在客戶端和目標物件之間起到中介作用。」
若無「無法直接引用」或「需額外控制」的需求,直接呼叫真實物件即可,別濫用模式。