代理模式透過封裝原始對象來實現對它的控制和管理,同時不改變它的行為、客戶端互動方式,以此介入或增強對原始對象的訪問和操作。
假設我們正在開發一個資料處理器,確保有權限的使用者能夠執行敏感資料處理。
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.")
透過使用代理模式,我們分離了權限檢查邏輯與敏感資料處理邏輯,使得程式碼更加清晰且容易維護。
此外,這種模式也增強了系統的安全性,因為它為敏感資料處理提供了額外的保護層。在實際應用中,這種模式適用於訪問數據庫、修改系統配置或任何需要細緻權限控制的場景。