設計模式:常見軟體開發挑戰的有效解決方案。 這些預先建造的解決方案可以防止“重新發明輪子”,為經常出現的問題提供答案。 然而,它們並不是一刀切的。開發人員必須調整模式以適應特定的專案需求。
設計模式分為三組:創建型、結構型、行為型,每組都有獨特的特徵。本文重點介紹一種流行的結構模式:代理模式。
理解代理模式
要掌握代理模式,請考慮以下場景:存取使用者資料需要先透過單獨的服務取得 JWT(JSON Web Token)。
問題
如果沒有代理模式,每個使用者資料請求都需要一個 JWT 請求,從而導致效能瓶頸,特別是在 JWT 服務緩慢或令牌過期時間未有效管理的情況下。這種低效率的方法如下圖所示:
這種重複的 JWT 獲取會減慢資料檢索速度。
解決方案在於代理模式。
解決方案
代理模式在客戶端和真實物件(JWT 服務)之間引入了一個中間層—代理。此中介管理訪問,添加快取或安全檢查等功能。
這透過快取 JWT 來提高效率,減少對 JWT 服務的呼叫。 使用代理模式的改進架構如下圖所示:
類別圖說明了實作:
類別圖顯示:
-
主題(JWTService):由代理程式和真實 JWT 服務實現的公共介面。 它定義了
requestJWT()
方法。 -
真實主題 (JWTServiceImpl): 實作
JWTService
並提供實際的 JWT 產生功能。 -
代理 (JWTServiceProxy): 控制對
JWTServiceImpl
的存取。它添加了快取和驗證邏輯。
實作 JWT 產生的代理模式
完整的程式碼範例可在 代理模式儲存庫 中找到。 以下是關鍵組件:
JWT 物件
JWT
類別(使用 Java 16 記錄)儲存 JWT 資料(令牌、過期時間、建立時間),並包含用於檢查有效性的 validateJWT()
方法。
public record JWT(String token, long expirationTime, long creationTime) { public boolean validateJWT(){ long currentTimeInSeconds = System.currentTimeMillis() / 1000; return currentTimeInSeconds < creationTime + expirationTime; } }
主題(介面)
JWTService
介面宣告 requestJWT()
方法。
public interface JWTService { JWT requestJWT(); }
真實主題
實作 JWTServiceImpl
,產生模擬 JWT。 JWTService
public class JWTServiceImpl implements JWTService { @Override public JWT requestJWT() { return new JWT(generateToken(), 5, System.currentTimeMillis() / 1000); } // ... generateToken() method (simplified for this example) ... }代理
快取並驗證 JWT。 JWTServiceProxy
public class JWTServiceProxy implements JWTService { private final JWTService jwtService; private JWT jwt; public JWTServiceProxy() { this.jwtService = new JWTServiceImpl(); } @Override public JWT requestJWT() { if (jwt == null || !jwt.validateJWT()) { jwt = jwtService.requestJWT(); } return jwt; } }測試代理模式
一個簡單的測試示範了代理程式的快取行為:
// ... (Main class with logging and Thread.sleep(5000) to simulate token expiration) ...輸出顯示最初僅產生一個 JWT,並且僅在第一個 JWT 過期後才產生新的 JWT,演示了代理程式的快取和驗證功能。
代理模式提高了軟體效率和安全性。 透過仔細考慮系統架構和潛在瓶頸,開發人員可以利用此模式來創建更健壯且可維護的應用程式。 請記住根據您的特定需求調整模式。 快樂編碼! ❤️
以上是設計模式系列—結構篇:代理模式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文分析了2025年的前四個JavaScript框架(React,Angular,Vue,Susve),比較了它們的性能,可伸縮性和未來前景。 儘管由於強大的社區和生態系統,所有這些都保持占主導地位,但它們的相對人口

本文介紹了SnakeyAml中的CVE-2022-1471漏洞,這是一個允許遠程代碼執行的關鍵缺陷。 它詳細介紹瞭如何升級春季啟動應用程序到Snakeyaml 1.33或更高版本的降低風險,強調了依賴性更新

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

Node.js 20通過V8發動機改進可顯著提高性能,特別是更快的垃圾收集和I/O。 新功能包括更好的WebSembly支持和精製的調試工具,提高開發人員的生產率和應用速度。

本文使用lambda表達式,流API,方法參考和可選探索將功能編程集成到Java中。 它突出顯示了通過簡潔性和不變性改善代碼可讀性和可維護性等好處

本文探討了在黃瓜步驟之間共享數據的方法,比較方案上下文,全局變量,參數傳遞和數據結構。 它強調可維護性的最佳實踐,包括簡潔的上下文使用,描述性


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3漢化版
中文版,非常好用