軟體設計模式 | 代理模式

更新 發佈閱讀 3 分鐘
代理模式透過封裝原始對象來實現對它的控制和管理,同時不改變它的行為客戶端互動方式,以此介入或增強對原始對象的訪問和操作。
raw-image

關鍵影響

  • 封装:代理模式透過封裝真實對象的操作細節,對客戶端隱藏了對象的複雜性和執行邏輯,同時保護真實對象的內部狀態。
  • 控制:代理可以在調用真實對象之前強制實施條件,如訪問權限,確保只有授權用戶可以執行特定操作。
  • 管理:代理可以管理真實對象的生命週期或狀態,例如按需初始化資源(延遲初始化)或在不再需要時處理清理任務。
  • 增強互動:可以集成額外的功能,如操作日誌記錄、結果緩存以提高性能,或添加錯誤處理以增強與真實對象的互動的魯棒性。

應用場景

假設我們正在開發一個資料處理器,確保有權限的使用者能夠執行敏感資料處理。

組件設計:

  • 主題介面(Subject Interface):定義了執行敏感資料處理的抽象層,這是代理和真實對象共同實現的介面。
  • 真實主體(Real Subject):這是實際的對象,負責實現處理敏感資料的具體邏輯。
  • 代理(Proxy):代理對象,用於執行前置檢查,如驗證用戶權限,然後根據檢查結果決定是否允許訪問真實主體。
from abc import ABC, abstractmethod

# 主題介面 - 敏感資料處理介面
class SensitiveOperation(ABC):
@abstractmethod
def process_sensitive_data(self):
pass

# 真實主體 - 實作敏感資料處理邏輯​
class DataProcessor(SensitiveOperation):
def process_sensitive_data(self):
print("Processing sensitive data...")

# 代理 - 判斷使用者是否有權限使用真實主體來處理敏感資料
class ProxyDataProcessor(SensitiveOperation):
def __init__(self, user_permissions):
self.permissions = user_permissions
self.data_processor = DataProcessor()

def process_sensitive_data(self):
if 'can_process_sensitive' in self.permissions:
self.data_processor.process_sensitive_data()
else:
print("Access denied: insufficient permissions.")

結論

透過使用代理模式,我們分離權限檢查邏輯敏感資料處理邏輯,使得程式碼更加清晰且容易維護。

此外,這種模式也增強了系統的安全性,因為它為敏感資料處理提供了額外的保護層。在實際應用中,這種模式適用於訪問數據庫、修改系統配置或任何需要細緻權限控制的場景。

留言
avatar-img
留言分享你的想法!
avatar-img
再寫5分鐘
67會員
19內容數
探索自我實現的小角落。沒有高高在上的教條,只有真實的分享和心得。
再寫5分鐘的其他內容
2024/07/02
在前一篇我們已經成功地建立簽核表單及簽核節點並關聯回請假表單,而本篇會接著介紹如何管理簽核節點狀態並同步更新簽核表單狀態。
Thumbnail
2024/07/02
在前一篇我們已經成功地建立簽核表單及簽核節點並關聯回請假表單,而本篇會接著介紹如何管理簽核節點狀態並同步更新簽核表單狀態。
Thumbnail
2024/07/02
本文介紹瞭如何在後端系統開發時設計不同表單的簽核流程,包括請假表單和採購表單。以及如何動態生成簽核表單,並建立簽核節點。另外還介紹瞭如何利用繼承來簡化簽核流程的設定。
Thumbnail
2024/07/02
本文介紹瞭如何在後端系統開發時設計不同表單的簽核流程,包括請假表單和採購表單。以及如何動態生成簽核表單,並建立簽核節點。另外還介紹瞭如何利用繼承來簡化簽核流程的設定。
Thumbnail
2024/06/15
《Future GPX Cyber Formula》閃電霹靂車是一部關於AI賽車的動漫作品,講述了主角與AI合作的故事。文章引述了動漫中的情節與角色,突出了AI協助駕駛者的功能。全文帶有熱血激情、深度思考和特殊概念。
Thumbnail
2024/06/15
《Future GPX Cyber Formula》閃電霹靂車是一部關於AI賽車的動漫作品,講述了主角與AI合作的故事。文章引述了動漫中的情節與角色,突出了AI協助駕駛者的功能。全文帶有熱血激情、深度思考和特殊概念。
Thumbnail
看更多
你可能也想看
Thumbnail
還在煩惱平凡日常該如何增添一點小驚喜嗎?全家便利商店這次聯手超萌的馬來貘,推出黑白配色的馬來貘雪糕,不僅外觀吸睛,層次豐富的雙層口味更是讓人一口接一口!本文將帶你探索馬來貘雪糕的多種創意吃法,從簡單的豆漿燕麥碗、藍莓果昔,到大人系的奇亞籽布丁下午茶,讓可愛的馬來貘陪你度過每一餐,增添生活中的小確幸!
Thumbnail
還在煩惱平凡日常該如何增添一點小驚喜嗎?全家便利商店這次聯手超萌的馬來貘,推出黑白配色的馬來貘雪糕,不僅外觀吸睛,層次豐富的雙層口味更是讓人一口接一口!本文將帶你探索馬來貘雪糕的多種創意吃法,從簡單的豆漿燕麥碗、藍莓果昔,到大人系的奇亞籽布丁下午茶,讓可愛的馬來貘陪你度過每一餐,增添生活中的小確幸!
Thumbnail
樣板模式的定義極為簡單,卻是大型系統程式、WEB/APP應用框架的設計核心,完美展現設計模式的價值: 簡單、高效、強大。
Thumbnail
樣板模式的定義極為簡單,卻是大型系統程式、WEB/APP應用框架的設計核心,完美展現設計模式的價值: 簡單、高效、強大。
Thumbnail
觀察者模式透過主題訂閱/訊息通知的機制,極度增強系統的可擴展性、靈活性以及降低組件間的耦合度。概念直觀簡單,是非常實用的設計模式。
Thumbnail
觀察者模式透過主題訂閱/訊息通知的機制,極度增強系統的可擴展性、靈活性以及降低組件間的耦合度。概念直觀簡單,是非常實用的設計模式。
Thumbnail
CSS 的繼承性是開發網頁樣式時的一個重要概念,它使得樣式設計更加靈活和高效,有助於提高程式碼的可讀性、一致性和可重用性,並加快開發速度,從而提供更好的開發體驗。
Thumbnail
CSS 的繼承性是開發網頁樣式時的一個重要概念,它使得樣式設計更加靈活和高效,有助於提高程式碼的可讀性、一致性和可重用性,並加快開發速度,從而提供更好的開發體驗。
Thumbnail
軟體系統的發展歷程大多相似,首重解決基本需求、提供操作介面,進而提升安全性、擴充功能、優化操作。
Thumbnail
軟體系統的發展歷程大多相似,首重解決基本需求、提供操作介面,進而提升安全性、擴充功能、優化操作。
Thumbnail
代理模式通過封裝原始對象來實現對該對象的控制和管理,同時不改變原始對象的行為或客戶端與該對象互動的方式,以此介入或增強對該對象的訪問和操作。
Thumbnail
代理模式通過封裝原始對象來實現對該對象的控制和管理,同時不改變原始對象的行為或客戶端與該對象互動的方式,以此介入或增強對該對象的訪問和操作。
Thumbnail
策略模式將多種演算法封裝於獨立的策略類別中,每個策略類別都實現了一個共同的介面。這種設計允許使用者在系統運行時動態選擇和切換演算法,以達成相同的目的。
Thumbnail
策略模式將多種演算法封裝於獨立的策略類別中,每個策略類別都實現了一個共同的介面。這種設計允許使用者在系統運行時動態選擇和切換演算法,以達成相同的目的。
Thumbnail
Creative Coding 作品變化概念,有或沒有的差別,隨機性,色彩模式的調整...等
Thumbnail
Creative Coding 作品變化概念,有或沒有的差別,隨機性,色彩模式的調整...等
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News