设计模式:常见软件开发挑战的有效解决方案。 这些预先构建的解决方案可以防止“重新发明轮子”,为经常出现的问题提供答案。 然而,它们并不是一刀切的。开发人员必须调整模式以适应特定的项目需求。
设计模式分为三组:创建型、结构型和行为型,每组都有独特的特征。本文重点介绍一种流行的结构模式:代理模式。
理解代理模式
要掌握代理模式,请考虑以下场景:访问用户数据需要首先通过单独的服务获取 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
实现 JWTService
,生成模拟 JWT。
public class JWTServiceImpl implements JWTService { @Override public JWT requestJWT() { return new JWT(generateToken(), 5, System.currentTimeMillis() / 1000); } // ... generateToken() method (simplified for this example) ... }
代理
JWTServiceProxy
缓存并验证 JWT。
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),比较了它们的性能,可伸缩性和未来前景。 尽管由于强大的社区和生态系统,所有这些都保持占主导地位,但它们的相对人口

本文讨论了使用咖啡因和Guava缓存在Java中实施多层缓存以提高应用程序性能。它涵盖设置,集成和绩效优势,以及配置和驱逐政策管理最佳PRA

Node.js 20通过V8发动机改进可显着提高性能,特别是更快的垃圾收集和I/O。 新功能包括更好的WebSembly支持和精制的调试工具,提高开发人员的生产率和应用速度。

Java的类上载涉及使用带有引导,扩展程序和应用程序类负载器的分层系统加载,链接和初始化类。父代授权模型确保首先加载核心类别,从而影响自定义类LOA

本文介绍了SnakeyAml中的CVE-2022-1471漏洞,这是一个允许远程代码执行的关键缺陷。 它详细介绍了如何升级春季启动应用程序到Snakeyaml 1.33或更高版本的降低风险,强调了依赖性更新

本文讨论了使用Maven和Gradle进行Java项目管理,构建自动化和依赖性解决方案,以比较其方法和优化策略。

本文使用lambda表达式,流API,方法参考和可选探索将功能编程集成到Java中。 它突出显示了通过简洁性和不变性改善代码可读性和可维护性等好处


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

禅工作室 13.0.1
功能强大的PHP集成开发环境

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

SublimeText3 Linux新版
SublimeText3 Linux最新版

记事本++7.3.1
好用且免费的代码编辑器

Dreamweaver CS6
视觉化网页开发工具