今天上班的時候
師父剛好教我設定公司電腦的proxy😶🌫️
結果很巧的今天就輪到要來寫這篇!
Proxy is a structural design pattern that lets you provide a substitute or placeholder for another object. A proxy controls access to the original object, allowing you to perform something either before or after the request gets through to the original object.
--Refactoring Guru
代理模式是一種結構型設計模式,它允許你為另一個物件提供一個substitute或是placeholder。Proxy是用來控制對原始物件的訪問,並允許你在把請求傳遞到原始物件之前或之後執行某些操作或處理。
再更進一步的說明~
代理模式允許我們創建一個代表其他classes功能的class。Proxy可以把各種東西介面化,如網絡連接、記憶體中的大型物件、文件或其他複雜或不可能複製的資源。
我們也可以說Proxy是個由客戶端呼叫用以訪問幕後的真實物件的物件。Proxy的意思是代替或代表。這說明著在代理設計模式中,一個class代表了另一個class的功能。
代理模式通常是為了解決以下主要問題:
控制訪問:
Proxy模式允許你控制對一個物件的訪問。這對於實現訪問控制和權限管理非常有用。通過Proxy,你可以限制對某些物件的訪問,只允許特定操作或特定用戶訪問。
例如企業或組織可以通過proxy伺服器來限制員工訪問特定網站,確保網絡使用符合政策和法規。
延遲載入Lazy Loading:
當一個物件的創建和初始化成本很高時,可以使用代理模式實現延遲載入。Proxy允許你推遲對該物件的創建,直到它被真正需要為止,從而提高應用程式的性能和效率。
遠端訪問:
在分散式系統中,代理模式可以用於處理遠端物件的訪問。Proxy充當了本機客戶端和遠端物件之間的中間人,處理通訊和遠端物件的生命周期管理,以實現遠端訪問。
效能優化:
Proxy模式還可以用於快取數據或結果,以減少計算或網絡請求的頻率,從而提高應用程式的效能。
安全性:
Proxy可以用於實現安全措施,例如保護代理(Protection Proxy),以確保只有具有相應權限的用戶可以訪問某些物件或資源。
底下這張圖是個清楚的例子(圖片來源: Refactoring Guru)
總之,Proxy模式通常用於需要控制對物件訪問、實現延遲載入、處理遠端訪問或實現其他額外功能的情境中。它有助於解耦程式碼,提高應用程式的可維護性和擴展性,並解決了與物件訪問相關的各種問題。
Proxy的種類有非常非常多,這些不同的代理類型在代理模式的框架下,用於解決各種不同的問題和應用場景。每種代理類型都具有特定的功能和目的,但它們都共享代理模式的核心思想。