設計模式系列—結構篇:代理模式
設計模式:常見軟體開發挑戰的有效解決方案。 這些預先建造的解決方案可以防止“重新發明輪子”,為經常出現的問題提供答案。 然而,它們並不是一刀切的。開發人員必須調整模式以適應特定的專案需求。
設計模式分為三組:創建型、結構型、行為型,每組都有獨特的特徵。本文重點介紹一種流行的結構模式:代理模式。
理解代理模式
要掌握代理模式,請考慮以下場景:存取使用者資料需要先透過單獨的服務取得 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) ...
代理模式提高了軟體效率和安全性。 透過仔細考慮系統架構和潛在瓶頸,開發人員可以利用此模式來創建更健壯且可維護的應用程式。 請記住根據您的特定需求調整模式。 快樂編碼! ❤️
以上是設計模式系列—結構篇:代理模式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

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

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

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

公司安全軟件導致部分應用無法正常運行的排查與解決方法許多公司為了保障內部網絡安全,會部署安全軟件。 ...

將姓名轉換為數字以實現排序的解決方案在許多應用場景中,用戶可能需要在群組中進行排序,尤其是在一個用...

系統對接中的字段映射處理在進行系統對接時,常常會遇到一個棘手的問題:如何將A系統的接口字段有效地映�...

在使用IntelliJIDEAUltimate版本啟動Spring...

在使用MyBatis-Plus或其他ORM框架進行數據庫操作時,經常需要根據實體類的屬性名構造查詢條件。如果每次都手動...

Java對象與數組的轉換:深入探討強制類型轉換的風險與正確方法很多Java初學者會遇到將一個對象轉換成數組的�...

電商平台SKU和SPU表設計詳解本文將探討電商平台中SKU和SPU的數據庫設計問題,特別是如何處理用戶自定義銷售屬...

Redis緩存方案如何實現產品排行榜列表的需求?在開發過程中,我們常常需要處理排行榜的需求,例如展示一個�...
