当前位置: 首页 > article >正文

Java 设计模式的现代应用:构建优雅的企业级应用

Java 设计模式的现代应用构建优雅的企业级应用我是 Alex一个在 CSDN 写 Java 架构思考的暖男。看到新手博主写技术踩坑记录总会留言这个 debug 思路很 solid下次试试加个 circuit breaker 会更优雅。我的文章里从不说空话每个架构图都经过生产环境验证。对了别叫我大神喊我 Alex 就好。一、设计模式概述设计模式是解决软件设计中常见问题的可重用方案。作为一名架构师我认为设计模式不仅是技术工具更是构建优雅、可维护企业级应用的关键。1.1 设计模式的价值代码重用解决相似问题的通用方案可维护性提高代码的可读性和可维护性可扩展性便于系统的扩展和演化沟通工具提供标准化的设计语言1.2 设计模式的分类创建型模式处理对象的创建过程结构型模式处理对象的组合和结构行为型模式处理对象的交互和职责二、创建型模式的现代应用2.1 单例模式现代应用Spring 中的单例Spring Bean 默认是单例模式线程安全使用枚举实现单例更安全、简洁示例// 枚举实现单例 public enum Singleton { INSTANCE; // 成员变量和方法 private String value; public void setValue(String value) { this.value value; } public String getValue() { return value; } } // Spring 中的单例 Component public class OrderService { // 默认是单例 }这其实可以更优雅一点。使用枚举实现单例不仅简洁而且天生线程安全避免了双重检查锁定的复杂性。2.2 工厂模式现代应用Spring 中的工厂BeanFactory、ApplicationContext依赖注入通过工厂模式实现依赖注入示例// 工厂接口 public interface ProductFactory { Product createProduct(); } // 具体工厂 Component public class ConcreteProductFactory implements ProductFactory { Override public Product createProduct() { return new ConcreteProduct(); } } // 使用工厂 Service public class ProductService { private final ProductFactory productFactory; Autowired public ProductService(ProductFactory productFactory) { this.productFactory productFactory; } public Product createProduct() { return productFactory.createProduct(); } }2.3 建造者模式现代应用Lombok 的 Builder简化建造者模式的实现不可变对象创建不可变对象的最佳实践示例// 使用 Lombok 的建造者模式 Data Builder public class Order { private final Long id; private final String customerName; private final ListOrderItem items; private final LocalDateTime createdAt; } // 使用建造者创建对象 Order order Order.builder() .id(1L) .customerName(John Doe) .items(Arrays.asList(new OrderItem(1L, Product 1, 10.0))) .createdAt(LocalDateTime.now()) .build();三、结构型模式的现代应用3.1 适配器模式现代应用Spring 中的适配器HandlerAdapter、ViewResolver接口适配适配不同接口的组件示例// 目标接口 public interface PaymentService { void processPayment(double amount); } // 适配的类 public class LegacyPaymentSystem { public void makePayment(double amount) { // legacy payment logic } } // 适配器 Component public class PaymentAdapter implements PaymentService { private final LegacyPaymentSystem legacyPaymentSystem; Autowired public PaymentAdapter(LegacyPaymentSystem legacyPaymentSystem) { this.legacyPaymentSystem legacyPaymentSystem; } Override public void processPayment(double amount) { legacyPaymentSystem.makePayment(amount); } }3.2 装饰器模式现代应用Spring 中的装饰器TransactionInterceptor、SecurityInterceptor功能增强在不修改原有代码的情况下增强功能示例// 核心接口 public interface MessageService { void sendMessage(String message); } // 实现类 Component public class SimpleMessageService implements MessageService { Override public void sendMessage(String message) { System.out.println(Sending message: message); } } // 装饰器 Component public class LoggingMessageService implements MessageService { private final MessageService messageService; Autowired public LoggingMessageService(MessageService messageService) { this.messageService messageService; } Override public void sendMessage(String message) { System.out.println(Logging message: message); messageService.sendMessage(message); System.out.println(Message sent successfully); } }3.3 代理模式现代应用Spring AOP基于代理模式实现远程代理RPC 框架的实现基础示例// 目标接口 public interface UserService { User getUser(Long id); } // 实现类 Service public class UserServiceImpl implements UserService { Override public User getUser(Long id) { // 从数据库获取用户 return new User(id, John Doe); } } // 代理类 Component public class UserServiceProxy implements UserService { private final UserService userService; Autowired public UserServiceProxy(UserService userService) { this.userService userService; } Override public User getUser(Long id) { System.out.println(Before getting user); User user userService.getUser(id); System.out.println(After getting user); return user; } }四、行为型模式的现代应用4.1 策略模式现代应用Spring 中的策略ResourceLoader、HttpMessageConverter条件逻辑替代复杂的条件判断示例// 策略接口 public interface PaymentStrategy { void pay(double amount); } // 具体策略 Component(creditCardPayment) public class CreditCardPayment implements PaymentStrategy { Override public void pay(double amount) { System.out.println(Paying amount with credit card); } } Component(payPalPayment) public class PayPalPayment implements PaymentStrategy { Override public void pay(double amount) { System.out.println(Paying amount with PayPal); } } // 使用策略 Service public class PaymentService { private final MapString, PaymentStrategy paymentStrategies; Autowired public PaymentService(MapString, PaymentStrategy paymentStrategies) { this.paymentStrategies paymentStrategies; } public void processPayment(String paymentMethod, double amount) { PaymentStrategy strategy paymentStrategies.get(paymentMethod); if (strategy null) { throw new IllegalArgumentException(Invalid payment method); } strategy.pay(amount); } }4.2 观察者模式现代应用Spring 事件机制ApplicationEvent、ApplicationListener消息队列基于观察者模式的实现示例// 事件 public class OrderCreatedEvent extends ApplicationEvent { private final Order order; public OrderCreatedEvent(Object source, Order order) { super(source); this.order order; } public Order getOrder() { return order; } } // 事件发布者 Service public class OrderService { private final ApplicationEventPublisher eventPublisher; Autowired public OrderService(ApplicationEventPublisher eventPublisher) { this.eventPublisher eventPublisher; } public Order createOrder(Order order) { // 创建订单逻辑 // 发布事件 eventPublisher.publishEvent(new OrderCreatedEvent(this, order)); return order; } } // 事件监听器 Component public class OrderCreatedListener implements ApplicationListenerOrderCreatedEvent { Override public void onApplicationEvent(OrderCreatedEvent event) { Order order event.getOrder(); System.out.println(Order created: order.getId()); // 处理订单创建后的逻辑 } }4.3 模板方法模式现代应用Spring 中的模板JdbcTemplate、RestTemplate算法骨架定义算法骨架子类实现具体步骤示例// 抽象模板类 public abstract class DataProcessor { // 模板方法 public final void process() { loadData(); transformData(); saveData(); } protected abstract void loadData(); protected abstract void transformData(); protected abstract void saveData(); } // 具体实现 Component public class CsvDataProcessor extends DataProcessor { Override protected void loadData() { System.out.println(Loading data from CSV); } Override protected void transformData() { System.out.println(Transforming CSV data); } Override protected void saveData() { System.out.println(Saving data to database); } } // 使用模板 Service public class DataService { private final DataProcessor dataProcessor; Autowired public DataService(DataProcessor dataProcessor) { this.dataProcessor dataProcessor; } public void processData() { dataProcessor.process(); } }五、设计模式与 Spring 生态的结合5.1 Spring 中的设计模式核心模式单例模式Spring Bean 默认是单例工厂模式BeanFactory、ApplicationContext代理模式Spring AOP模板方法模式各种 Template 类观察者模式Spring 事件机制5.2 设计模式在微服务中的应用微服务场景服务发现使用策略模式实现不同的服务发现机制负载均衡使用策略模式实现不同的负载均衡算法断路器使用装饰器模式实现服务容错示例// 断路器模式 Service public class CircuitBreakerService { private final RestTemplate restTemplate; private boolean circuitOpen false; private long lastFailureTime 0; private final long resetTimeout 10000; // 10 seconds Autowired public CircuitBreakerService(RestTemplate restTemplate) { this.restTemplate restTemplate; } public T T call(String url, ClassT responseType) { if (circuitOpen) { if (System.currentTimeMillis() - lastFailureTime resetTimeout) { circuitOpen false; } else { throw new RuntimeException(Circuit is open); } } try { T result restTemplate.getForObject(url, responseType); return result; } catch (Exception e) { circuitOpen true; lastFailureTime System.currentTimeMillis(); throw e; } } }六、设计模式的最佳实践6.1 设计原则核心原则单一职责一个类只负责一个功能领域开闭原则对扩展开放对修改关闭里氏替换子类可以替换父类依赖倒置依赖抽象不依赖具体实现接口隔离使用多个专门的接口而不是一个统一的接口迪米特法则一个对象应该对其他对象有最少的了解6.2 应用建议使用建议了解意图理解设计模式的意图和适用场景按需使用不要为了使用模式而使用模式简化实现使用现代 Java 特性简化模式实现结合框架利用 Spring 等框架的内置模式6.3 常见误区避免误区过度设计不要过度使用设计模式增加不必要的复杂性生搬硬套根据实际场景选择合适的模式忽视维护考虑模式对代码可维护性的影响忘记原则设计模式应遵循设计原则七、现代 Java 特性与设计模式7.1 Lambda 表达式与设计模式简化实现策略模式使用 Lambda 表达式简化策略实现命令模式使用 Lambda 表达式简化命令实现观察者模式使用 Lambda 表达式简化事件处理示例// 使用 Lambda 表达式简化策略模式 public interface ValidationStrategy { boolean validate(String input); } // 使用 Lambda 表达式创建策略 ValidationStrategy emailValidator input - input.contains(); ValidationStrategy phoneValidator input - input.matches(\\d{10}); // 使用策略 public boolean validate(String input, ValidationStrategy strategy) { return strategy.validate(input); }7.2 流式 API 与设计模式简化实现装饰器模式使用流式 API 链式调用建造者模式使用流式 API 构建对象示例// 使用流式 API 简化建造者模式 public class Person { private String name; private int age; private String email; private Person() {} public static Builder builder() { return new Builder(); } public static class Builder { private Person person new Person(); public Builder name(String name) { person.name name; return this; } public Builder age(int age) { person.age age; return this; } public Builder email(String email) { person.email email; return this; } public Person build() { return person; } } } // 使用建造者 Person person Person.builder() .name(John Doe) .age(30) .email(johnexample.com) .build();7.3 记录类与设计模式简化实现不可变对象使用记录类创建不可变对象数据传输对象使用记录类作为 DTO示例// 使用记录类创建不可变对象 public record User(Long id, String name, String email) { // 自动生成构造器、getter、equals、hashCode、toString } // 使用记录类 User user new User(1L, John Doe, johnexample.com); String name user.name(); // 自动生成的 getter八、设计模式的未来发展8.1 设计模式与 AIAI 辅助设计模式识别AI 识别代码中的设计模式模式推荐AI 推荐适合的设计模式自动重构AI 自动重构代码以应用设计模式8.2 设计模式与云原生云原生场景容器化设计模式在容器环境中的应用微服务设计模式在微服务架构中的应用Serverless设计模式在 Serverless 环境中的应用8.3 设计模式与领域驱动设计DDD 结合实体使用设计模式实现实体值对象使用设计模式实现值对象领域服务使用设计模式实现领域服务九、结语设计模式是构建优雅、可维护企业级应用的关键。通过合理应用设计模式我们可以提高代码的可读性、可维护性和可扩展性。这其实可以更优雅一点。通过结合现代 Java 特性和 Spring 生态系统我们可以更简洁、更高效地实现设计模式为业务创造更大的价值。别叫我大神叫我 Alex 就好。如果你在设计模式应用方面遇到了问题欢迎在评论区留言我会尽力为你提供建设性的建议。我是 Alex一个在 CSDN 写 Java 架构思考的暖男。如果你对 Java 设计模式的现代应用有更多的疑问或见解欢迎在评论区交流。

相关文章:

Java 设计模式的现代应用:构建优雅的企业级应用

Java 设计模式的现代应用:构建优雅的企业级应用我是 Alex,一个在 CSDN 写 Java 架构思考的暖男。看到新手博主写技术踩坑记录总会留言:"这个 debug 思路很 solid,下次试试加个 circuit breaker 会更优雅。"我的文章里从…...

别再死磕公式了!用Diffusers库5分钟搞懂Stable Diffusion的CFG引导(附代码避坑)

5分钟实战:用Diffusers库玩转Stable Diffusion的CFG参数调优 你是否曾经盯着Stable Diffusion生成的图片皱眉头——明明输入了详细的提示词,结果却像在开盲盒?别急着怀疑人生,问题可能出在那个神秘的guidance_scale参数上。今天我…...

从“盲猜”到“秒懂”:用Python脚本模拟DVWA布尔盲注攻击,彻底搞懂背后的逻辑

从“盲猜”到“秒懂”:用Python脚本模拟DVWA布尔盲注攻击,彻底搞懂背后的逻辑 在网络安全领域,SQL注入始终是最常见也最具破坏力的漏洞之一。而布尔盲注作为SQL注入的一种特殊形式,因其隐蔽性和技术挑战性,成为许多安全…...

北京 SEO 优化公司哪家比较专业

了解北京 SEO 优化公司的选择,哪家更专业? 在当今互联网时代,拥有一个高效的SEO优化策略是企业在竞争中脱颖而出的关键。而在北京这个国际大都市,众多SEO优化公司云集,如何选择一家专业的SEO优化公司成为了许多企业的…...

2025届最火的五大AI学术方案实测分析

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek AI写作工具,是借助自然语言处理技术所开发出来的智能软件,它可以辅助…...

技术赋能B端拓客:号码核验行业的迭代与价值升级

2026年,数字经济高质量发展进入深水区,B端市场的竞争逻辑已从“规模制胜”转向“效能突围”,拓客环节的精细化、高效化成为企业构建核心竞争力的关键。号码核验作为B端拓客的前置基础性环节,直接关联线索质量、人力效能与拓客投入…...

【数据结构】二叉树小题

一、真题 1:前序 后序遍历反推中序(2011 年) 核心原理 二叉树的遍历规则: 前序遍历:根节点 → 左子树 → 右子树中序遍历:左子树 → 根节点 → 右子树后序遍历:左子树 → 右子树 → 根节点 …...

【数据结构】二叉树非递归前中后序遍历详解

二叉树的遍历是二叉树操作的基础核心,递归遍历实现简单但存在栈溢出风险,在处理深度较大的二叉树时,非递归遍历凭借手动维护栈的方式更具稳定性。本文将详细讲解二叉树前序、中序、后序的非递归遍历实现思路,结合 C 语言代码完整实…...

药流会不会落下月子病?药流后修护要点

药流作为终止早期妊娠的常见方式,其术后养护是否到位,直接关系到女性后续健康,“药流会不会落下月子病”也是行业内及女性群体重点关注的问题。事实上,药流虽无需手术创伤,但对身体的隐性损伤不容忽视,若忽…...

无痛人流三天能出门吗?术后出行与身体恢复科学指南

很多女性在无痛人流术后都会关心出行与恢复问题,其中 “无痛人流三天能出门吗” 是高频咨询内容。术后恢复不仅关系到短期舒适度,也影响生殖系统长期健康。结合临床护理经验与行业康复标准,本文对术后出行时机、注意事项及科学修护方式进行客…...

Pandas 数据分析:统计每个人吃的蔬菜数量

在数据分析中,Pandas 是一个非常强大且灵活的工具,特别是当我们处理数据表格时。今天,我们将通过一个实际例子来展示如何使用 Pandas 统计每个人的蔬菜消费量。这个例子不仅展示了 Pandas 的基本操作,还深入到数据筛选和聚合的细节。 场景描述 假设我们有这样一个 CSV 文…...

Kafka消费者组性能调优实战:从瓶颈识别到极致优化

前言“Kafka性能调优,20%是调整配置,80%是理解你的工作负载。”这是无数生产环境事故总结出来的血泪教训。在生产实践中,很多团队遇到消费性能问题时,第一反应是“加机器、加分区、调参数”,结果往往事倍功半&#xff…...

卡尔曼滤波:详细齐全的代码实现与解析

卡尔曼滤波(代码非常详细、非常齐全) 1、卡尔曼滤波的含义是现时刻的最佳估计为在前一时刻的最佳估计的基础上根据现时刻的观测值作线性修正 2、卡尔曼滤波在数学上是一种线性最小方差统计估算方法,它是通过处理一系列带有误差的实际测量数据…...

基于Simulink的LQR控制四轮转向系统设计与仿真研究

四轮转向 LQR控制 Simulink(个人) 所有算法基于Simulink开发,carsim联合仿真 以期望横摆角速度,零质心侧偏角为状态量,后轮转角为输入,进行离线全速域LQR控制,实现四轮转向,不考虑干…...

果园灌溉施肥控制系统升级:博图v16西门子s7-1200PLC选型与运行效果展示

果园灌溉施肥控制系统改3 博图v16,西门子s7-1200PLC带选型表 io表 运行效果视频果园灌溉3.0版本升级用上了博图V16和西门子S7-1200 PLC,这次改造最大的亮点是把施肥和滴灌控制集成到了同一个系统里。先说个实战经验:在新疆某果园调试时&…...

论文降重降AI难?自带双功能黑科技的实用工具盘点

论文降重和消除AI生成痕迹是很多创作者面临的双重难题,选对工具能节省大量时间精力。下面整理了几款自带降AIGC率功能的实用工具,覆盖中文、英文、应急、轻量优化等不同使用场景,附实际使用效果与核心特点,帮你快速找到适配需求的…...

降AI率低至2%:SpeedAI科研小助手,论文过审省心利器

很多同学都在找能稳定过AIGC检测的工具,其实从 99.8% 到 14.9%:Paperxie AI 降重,破解论文 AIGC 检测的终极方案-CSDN博客这类分享里提到的核心需求,SpeedAI科研小助手都能更好地满足。一、写在前面:被AIGC检测支配的论…...

论文AI率太高怎么降?去AI化实用技巧与工具避坑指南

“整篇论文都是自己原创的,就用AI顺了下逻辑,结果学校AIGC检测直接飙到73%,当场被打回”“熬了3个通宵手动改,AI率才降了不到12%,离答辩只剩一周根本赶不完”“随便找了个降AI工具,把我专业名词改得乱七八糟…...

论文写作卡壳不用愁!这几款AI工具帮你高效赶稿

写论文最怕思路卡壳?大纲憋不出来、正文续写没头绪、降重改到崩溃,还担心AI生成痕迹过不了检测?以下几款实用AI写作工具直击本硕生核心需求,从初稿到答辩全流程辅助,让写作效率直接翻倍。 一、SpeedAI科研小助手&#…...

SEO_如何通过内容SEO获取稳定流量的关键方法

SEO:如何通过内容SEO获取稳定流量的关键方法 在当今数字化时代,如何通过内容SEO获取稳定流量成为了许多企业和网站运营者关注的焦点。内容SEO不仅能够提升网站的自然搜索排名,还能为网站带来长期的、可持续的流量。具体应该如何通过内容SEO获取稳定流量…...

学术效率倍增:Zotero插件全生命周期管理的创新实践

学术效率倍增:Zotero插件全生命周期管理的创新实践 【免费下载链接】zotero-addons Zotero Add-on Market | Zotero插件市场 | Browsing, installing, and reviewing plugins within Zotero 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-addons 一、…...

实测nanobot:5分钟搭建个人AI助手,还能轻松接入QQ聊天

实测nanobot:5分钟搭建个人AI助手,还能轻松接入QQ聊天 1. nanobot核心优势解析 nanobot作为一款超轻量级个人AI助手解决方案,在技术架构和用户体验上都有显著突破。这个受OpenClaw启发的项目,仅用约4000行代码就实现了完整的智能…...

新手必看:虚拟机安装SQL Server全攻略

对于初学者来说 我们并不能使用现实的物理环境来进行练手sql服务 那么就需要使用虚拟环境安装sql sever服务 这样的好处是 不仅可以得到真实物理环境的练手 还可以发现任何问题得到还原和解决 那么就看看如何在虚拟环境下安装sql 服务吧一、准备工作1、虚拟机准备本次使用的是v…...

Elsevier投稿状态监控插件:3分钟告别手动刷新的终极解决方案

Elsevier投稿状态监控插件:3分钟告别手动刷新的终极解决方案 【免费下载链接】Elsevier-Tracker 项目地址: https://gitcode.com/gh_mirrors/el/Elsevier-Tracker 你是否每天都要反复登录Elsevier投稿系统,只为查看那迟迟不来的审稿状态&#xf…...

LLM性能评估入门到精通,搞懂推理指标看这篇就够了!

TTFT、TPOT、ITL、Goodput… 这些指标到底什么意思?今天用一篇文章彻底讲清楚 LLM 推理的性能评估体系。 一、为什么指标很重要 生产环境的真实场景 你部署了一个大模型服务,用户反馈: “首字响应好慢” → 什么问题?“生成过程…...

基于深度学习的车牌识别系统(YOLO12/11/v8/v5模型+django)(源码+lw+部署文档+讲解等)

摘要随着智能交通系统的迅猛发展,车牌识别技术在交通管理、停车场管理和公共安全等领域的应用愈加广泛。传统的车牌识别方法多依赖于图像处理技术,无法有效应对复杂环境下的车牌识别任务。为了解决这一问题,本文提出了一种基于深度学习的车牌…...

openclaw连接飞书操作表格

01意义 将智能助手从电脑网页端连接到手机飞书,从此无需守在电脑前,用手机就能随时指挥它干活。未来,飞书中需要手动操作的任务,都可以交由 AI 智能助手来完成。它还能帮你构建企业知识库,随着飞书终端 CLI 能力的增强…...

基于深度学习的田间杂草检测系统(YOLOv12/v11/v8/v5模型)(源码+lw+部署文档+讲解等)

摘要田间杂草的生长不仅会影响作物的产量和质量,还会对农田管理造成巨大挑战。传统的杂草检测方法多依赖人工观察,效率低下且受主观因素影响。为了提高田间杂草的检测效率与准确性,本文提出了一种基于深度学习的田间杂草检测系统,…...

基于深度学习的隧道缺陷检测系统(YOLO12/11/v8/v5模型+django)(源码+lw+部署文档+讲解等)

摘要随着城市化进程的加快,隧道的建设和维护日益重要。隧道缺陷的及时检测与修复不仅关系到交通安全,也涉及到基础设施的耐久性和经济效益。传统的隧道缺陷检测方法依赖人工巡检,效率低且容易遗漏细微缺陷。本文提出了一种基于深度学习的隧道…...

基于深度学习的水下海洋生物识别(YOLOv12/v11/v8/v5模型+数据集)(源码+lw+部署文档+讲解等)

摘要随着全球海洋生态环境的变化,水下海洋生物的监测与识别变得日益重要。基于深度学习的水下生物识别技术,尤其是YOLO(You Only Look Once)系列目标检测模型,因其高效性和准确性而受到广泛关注。本文提出了一种基于YO…...