設計模式入門:代理模式 Proxy Pattern

更新於 發佈於 閱讀時間約 2 分鐘

在生活中我們有時會遇到無法直接完成某些事情的情況,於是我們請來了一個「代理」來幫我們處理一切。比如你想買一台限量版遊戲機,但因為距離太遠或沒時間親自去購買,你就找了一個代購服務來幫你完成購買。這個代購就是你的「代理」。


在軟體設計中,代理模式 Proxy Pattern 的概念也很類似,它是一種設計模式,用來讓一個物件(代理)代表另一個物件來處理請求或控制對它的存取。


什麼是代理模式?

代理模式的核心思想是:為某個物件提供一個替代者,以控制對這個物件的存取。這樣可以在不改變原來物件的情況下,加入一些額外的功能,或者進行存取控制。代理模式就像是在你和目標物件之間加了一層中間層,這層中間層可以幫你處理所有的請求,並在需要時代為執行其他操作。


代理模式的生活化例子

我們來看一個實際的例子。假設你在瀏覽一個網頁時,有很多高解析度的圖片。這些圖片文件很大,直接載入可能會導致網頁載入速度變慢。為了改善使用者體驗,你可以用代理模式來優化這個過程。代理物件可以先顯示一張縮圖,等到使用者真的需要看大圖時,再去載入完整圖片。


這個代理過程就像是:縮圖代理幫你先頂著,等你真的點擊想看大圖時,代理才會請出真正的大圖來顯示,這樣不僅節省了時間,也優化了使用者的體驗。


代理模式的優缺點

代理模式有很多好處。它可以幫助我們有效地管理和控制對目標物件的存取,比如延遲載入資源、存取權限等。代理模式還讓我們可以在不改變原有類別的基礎上新增額外功能,這讓程式設計更加靈活。


代理模式也有它的缺點。導入代理後,系統會增加一層間接層,這可能會導致程式碼結構變得更加複雜。如果代理內的邏輯過於複雜,可能還會影響效能。


總結一下,代理模式就像是一個幫我們處理瑣事的經紀人,讓我們能專注於更重要的事務。當你需要控制某個物件的存取,或者在存取前後添加額外邏輯時,代理模式可能會是你的好幫手。它不僅能提升系統的靈活性,也能減少不必要的複雜性。但使用時,也要注意不要過度濫用,避免讓系統變得更複雜。


想深入探索設計模式的妙用,可以參考我在今年iThome鐵人賽中發表的文章。
https://ithelp.ithome.com.tw/articles/10347277


留言
avatar-img
留言分享你的想法!
avatar-img
ShengYu的沙龍
6會員
83內容數
對於經營自媒體、部落格或社群媒體感興趣?我專注於提供實用的寫作技巧、數位行銷策略,以及個人成長建議。 每週,我會分享提升寫作技巧、優化部落格經營、有效管理社群媒體、以及投資理財的寶貴知識。追蹤我,獲得實用的工具和建議,讓你的個人品牌和財務管理更上一層樓!
ShengYu的沙龍的其他內容
2024/10/01
最近看到許多有關職場的文章,讓我感觸良多,也想分享一些想法。 當公司遇到財務問題時,裁員往往是最直接的方法。這時候無論你是公司創始元老,還是奉獻多年的資深員工,公司都只看數字。薪水高的、資深的員工,常常會是第一批被裁的對象。 你也許會想:「我對公司有那麼多貢獻,為什麼還會被裁?」但現實是
2024/10/01
最近看到許多有關職場的文章,讓我感觸良多,也想分享一些想法。 當公司遇到財務問題時,裁員往往是最直接的方法。這時候無論你是公司創始元老,還是奉獻多年的資深員工,公司都只看數字。薪水高的、資深的員工,常常會是第一批被裁的對象。 你也許會想:「我對公司有那麼多貢獻,為什麼還會被裁?」但現實是
2024/09/30
在職場上,許多人都會面臨不快樂的情境,可能是因為壓力、工作與生活不平衡、或是缺乏成就感。你是不是也有過這樣的感覺?今天我想分享我最近看到一個成功人士在職場上讓工作變得更快樂的方法與心態轉變的秘訣。 主動爭取機會,掌握主動權 在職場中,最不快樂的感覺往往來自於被動接受工作。如果你總是被丟一堆工
2024/09/30
在職場上,許多人都會面臨不快樂的情境,可能是因為壓力、工作與生活不平衡、或是缺乏成就感。你是不是也有過這樣的感覺?今天我想分享我最近看到一個成功人士在職場上讓工作變得更快樂的方法與心態轉變的秘訣。 主動爭取機會,掌握主動權 在職場中,最不快樂的感覺往往來自於被動接受工作。如果你總是被丟一堆工
2024/09/29
軟體開發中,我們經常會遇到各種令人抓狂的設計問題。有時候是趕進度的壓力讓我們妥協了設計質量;有時候是忽略了好的設計原則,結果掉進了各種反模式的坑裡。今天我們來繼續聊聊幾個常見的反模式。 寫死 Hard Code 直接將資料值或邏輯硬寫死在程式碼裡,當需求變更時,修改這些 Hard Code
2024/09/29
軟體開發中,我們經常會遇到各種令人抓狂的設計問題。有時候是趕進度的壓力讓我們妥協了設計質量;有時候是忽略了好的設計原則,結果掉進了各種反模式的坑裡。今天我們來繼續聊聊幾個常見的反模式。 寫死 Hard Code 直接將資料值或邏輯硬寫死在程式碼裡,當需求變更時,修改這些 Hard Code
看更多
你可能也想看
Thumbnail
孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!
Thumbnail
孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
最近觀察到許多網站有一個特性,就是有些網站會使用不同的模板做同一個關鍵字。 很多開發者在做產品的時候會有一個特性,就是會使用相同的模板。使用相同模板的好處不外乎是減少重複開發的時間、快速上站。 因為其實在程式開發中有很多功能可能是相似甚至是重複的。在這種情況下我們不應該重複去開發相同功能,而
Thumbnail
最近觀察到許多網站有一個特性,就是有些網站會使用不同的模板做同一個關鍵字。 很多開發者在做產品的時候會有一個特性,就是會使用相同的模板。使用相同模板的好處不外乎是減少重複開發的時間、快速上站。 因為其實在程式開發中有很多功能可能是相似甚至是重複的。在這種情況下我們不應該重複去開發相同功能,而
Thumbnail
樣板模式的定義極為簡單,卻是大型系統程式、WEB/APP應用框架的設計核心,完美展現設計模式的價值: 簡單、高效、強大。
Thumbnail
樣板模式的定義極為簡單,卻是大型系統程式、WEB/APP應用框架的設計核心,完美展現設計模式的價值: 簡單、高效、強大。
Thumbnail
觀察者模式透過主題訂閱/訊息通知的機制,極度增強系統的可擴展性、靈活性以及降低組件間的耦合度。概念直觀簡單,是非常實用的設計模式。
Thumbnail
觀察者模式透過主題訂閱/訊息通知的機制,極度增強系統的可擴展性、靈活性以及降低組件間的耦合度。概念直觀簡單,是非常實用的設計模式。
Thumbnail
代理模式通過封裝原始對象來實現對該對象的控制和管理,同時不改變原始對象的行為或客戶端與該對象互動的方式,以此介入或增強對該對象的訪問和操作。
Thumbnail
代理模式通過封裝原始對象來實現對該對象的控制和管理,同時不改變原始對象的行為或客戶端與該對象互動的方式,以此介入或增強對該對象的訪問和操作。
Thumbnail
策略模式將多種演算法封裝於獨立的策略類別中,每個策略類別都實現了一個共同的介面。這種設計允許使用者在系統運行時動態選擇和切換演算法,以達成相同的目的。
Thumbnail
策略模式將多種演算法封裝於獨立的策略類別中,每個策略類別都實現了一個共同的介面。這種設計允許使用者在系統運行時動態選擇和切換演算法,以達成相同的目的。
Thumbnail
之前在【什麼是網路請求(HTTP response)】筆記裡有提到,網路請求遇到 CORS 跨域問題,在開發時可以透過 vite 的反向代理來解決,那麼什麼是反向代理,有反向代理的話是不是也有正向代理呢?
Thumbnail
之前在【什麼是網路請求(HTTP response)】筆記裡有提到,網路請求遇到 CORS 跨域問題,在開發時可以透過 vite 的反向代理來解決,那麼什麼是反向代理,有反向代理的話是不是也有正向代理呢?
Thumbnail
當我們在撰寫一套系統的時候, 總是會提供一個介面讓使用者來觸發功能模組並回傳使用者所需的請求, 而傳統的安裝包模式總是太侷限, 需要個別主機獨立安裝, 相當繁瑣, 但隨著時代的演進與互聯網的崛起, 大部分的工作都可以藉由網頁端、裝置端來觸發, 而伺服端則是負責接收指令、運算與回傳結果, 雲端
Thumbnail
當我們在撰寫一套系統的時候, 總是會提供一個介面讓使用者來觸發功能模組並回傳使用者所需的請求, 而傳統的安裝包模式總是太侷限, 需要個別主機獨立安裝, 相當繁瑣, 但隨著時代的演進與互聯網的崛起, 大部分的工作都可以藉由網頁端、裝置端來觸發, 而伺服端則是負責接收指令、運算與回傳結果, 雲端
Thumbnail
替產業做設計 有人要我談程式設計,那我就稍微談一下。我從事的大都是產業的工作,所以我們也從如何替產業做設計來談起。基本上,每個產業都會有自己的作業流程,大同小異。但是基礎來做都是一樣的,都會有客戶、物料、產品、供應商、員工等資料。不同的是,由於企業型態的不同,他們每個人有不同的作業流程。這個作業流
Thumbnail
替產業做設計 有人要我談程式設計,那我就稍微談一下。我從事的大都是產業的工作,所以我們也從如何替產業做設計來談起。基本上,每個產業都會有自己的作業流程,大同小異。但是基礎來做都是一樣的,都會有客戶、物料、產品、供應商、員工等資料。不同的是,由於企業型態的不同,他們每個人有不同的作業流程。這個作業流
Thumbnail
這篇文章將會講述虛擬(virtual)與覆蓋(override)的簡易使用方式。
Thumbnail
這篇文章將會講述虛擬(virtual)與覆蓋(override)的簡易使用方式。
Thumbnail
是否有時遇到一種情況,發現一種似乎有一定勝率的交易技術線型, 想回測時,若軟體沒有提供相關線型回測,就必須自己寫程式來呈現線型,進而回測 然而卻不知道如何用程式的方式將他呈現出來。 今天用XQ來做個簡單分享: 弄清楚運作模式 在懂得基本變數的情況下,最重要的是懂得程式是怎麼運作的, 無
Thumbnail
是否有時遇到一種情況,發現一種似乎有一定勝率的交易技術線型, 想回測時,若軟體沒有提供相關線型回測,就必須自己寫程式來呈現線型,進而回測 然而卻不知道如何用程式的方式將他呈現出來。 今天用XQ來做個簡單分享: 弄清楚運作模式 在懂得基本變數的情況下,最重要的是懂得程式是怎麼運作的, 無
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News