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

Java常见的设计模式

Java常见的设计模式

    • 工厂模式(Factory Pattern)
    • 单例模式(Singleton Pattern)
    • 代理模式模式(Proxy Pattern)
    • 适配器模式(Adapter Pattern)
    • 观察者模式(Observer Pattern)
    • 模板方法模式(Template Pattern)
    • 策略模式

工厂模式(Factory Pattern)

工厂模式是一种创建型设计模式,它提供了一种创建对象的方式,使得应用程序可以更加灵活和可维护。比如在 Spring 中,FactoryBean 就是一个工厂模式的实现,使用它的工厂模式就可以创建出来其他的 Bean 对象。

单例模式(Singleton Pattern)

单例模式是一种创建型设计模式,它保证一个类只有一个实例,并提供了一个全局访问点。比如在 Spring 中,所有的 Bean 默认是单例的,这意味着每个 Bean 只会被创建一次,并且可以在整个应用程序中共享。

代理模式模式(Proxy Pattern)

代理模式是一种结构型设计模式,它允许开发人员在不修改原有代码的情况下,向应用程序中添加新的功能。比如在 Spring AOP(面向切面编程)就是使用代理模式的实现,它允许开发人员在方法调用前后执行一些自定义的操作,比如日志记录、性能监控等。

适配器模式(Adapter Pattern)

适配器模式是一种结构型设计模式,它允许开发人员将一个类的接口转换成另一个类的接口,以满足客户端的需求。在 Spring 中,适配器模式常用于将不同类型的对象转换成统一的接口,比如将 Servlet API 转换成 Spring MVC 的控制器接口。

观察者模式(Observer Pattern)

行为设计模式,定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。比如事件驱动、消息传递等功能时, Spring 事件驱动模型(Spring Event 事件机制 )使用观察者模式,ApplicationEventPublisher 事件发布者将事件发布给 ApplicationEventMulticaster 事件广播器,该广播器将事件派发给 @EventListener 注解的事件监听者。

模板方法模式(Template Pattern)

行为设计模式,模板方法模式是最常用的设计模式之一,它是指定义一个操作算法的骨架,而将一些步骤的实现延迟到子类中去实现,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。此模式是基于继承的思想实现代码复用的。比如在 MyBatis 中的典型代表 BaseExecutor,在 MyBatis 中 BaseExecutor 实现了大部分SQL 执行的逻辑;Spring 中JdbcTemplate 就是一个模板方法模式的实现,它提供了一种简单的方式来执行 SQL 查询和更新操作。

策略模式

模式策略模式是一种行为型设计模式,它定义了一系列算法,并将每个算法封装起来,使得它们可以互相替换。Spring 中的 TaskExecutor,TaskExecutor 提供了很多实现,比如以下这些:

  • SyncTaskExecutor:直接在调用线程中执行任务,没有真正的异步
  • SimpleAsyncTaskExecutor:使用单线程池异步执行任务;
  • ConcurrentTaskExecutor:使用线程池异步执行任务;
  • SimpleTransactionalTaskExecutor:支持事务的 SimpleAsyncTaskExecutor。这样,我们可以根据自己的需求选择不同的实现策略,使用策略模式的好处有以下这些:

1、可以在不修改原代码的基础上选择不同的算法或策略;
2、可减少程序中的条件语句,根据环境改变选择合适的策略;
3、扩展性好,如果有新的策略出现,只需要创建一个新的策略类,无须修改原代码。

相关文章:

Java常见的设计模式

Java常见的设计模式 工厂模式(Factory Pattern)单例模式(Singleton Pattern)代理模式模式(Proxy Pattern)适配器模式(Adapter Pattern)观察者模式(Observer Pattern&…...

Oracle 19c RAC集群相关日志

1.DB日志(数据库日志) Redo Log(重做日志): 在Oracle数据库中,重做日志记录了数据库发生的所有修改操作,包括数据的插入,更新和删除。在RAC的环境中,每个实例都有自己的重…...

TR4 - Transformer中的多头注意力机制

目录 前言自注意力机制Self-Attention层的具体机制Self-Attention 矩阵计算 多头注意力机制例子解析 代码实现总结与心得体会 前言 多头注意力机制可以说是Transformer中最主要的模块,没有之一。这次我们来仔细分析一下注意力机制与多头注意力机制。 自注意力机制…...

three.js跟着教程实现VR效果(四)

参照教程:https://juejin.cn/post/6973865268426571784(作者:大帅老猿) 1.WebGD3D引擎 用three.js (1)使用立方体6面图 camera放到 立方体的中间 like “回” 让贴图向内翻转 (2)使…...

AI预测体彩排3第1弹【2024年4月12日预测--第1套算法开始计算第1次测试】

前面经过多个模型几十次对福彩3D的预测,积累了一定的经验,摸索了一些稳定的规律,有很多彩友让我也出一下排列3的预测结果,我认为目前时机已成熟,且由于福彩3D和体彩排列3的玩法完全一样,我认为3D的规律和模…...

spring 中的控制反转

在Spring框架中,控制反转(IoC,Inversion of Control)是指将对象的创建和管理交给了容器,而不是在应用程序代码中直接创建对象。在传统的编程模式中,应用程序代码通常负责创建对象并管理它们的生命周期&…...

GO并发总是更快吗?

许多开发人员的一个误解是,并发解决方案总是比串行更快,大错特错。解决方案的整体性能取决于许多因素,例如,结构的效率(并发)、可以并行处理的部分以及计算单元的竞争程度。 1. GO调度 线程是操作系统可以执行的最小单元。如果一个进程想要同时执行多个动作,它可以启动…...

echarts折线图自定义打点标记小工具

由于没研究明白echarts怎么用label和lableLine实现自定义打点标记&#xff0c;索性用markPoint把长方形压扁成线模拟了一番自定义打点标记&#xff0c;记录下来备用。&#xff08;markLine同理也能实现&#xff09; 实现代码如下&#xff1a; <!DOCTYPE html> <html…...

【图论】Leetcode 200. 岛屿数量【中等】

岛屿数量 给你一个由 ‘1’&#xff08;陆地&#xff09;和 ‘0’&#xff08;水&#xff09;组成的的二维网格&#xff0c;请你计算网格中岛屿的数量。 岛屿总是被水包围&#xff0c;并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外&#xff0c;你可以…...

酒店大厅装水离子雾化壁炉前和装后对比

在酒店大厅装水离子雾化壁炉之前和之后&#xff0c;大厅的氛围和体验会有显著的对比&#xff1a; 装水离子雾化壁炉之前&#xff1a; 传统感&#xff1a;在壁炉安装之前&#xff0c;大厅可能会有传统的装饰或者简单的暖气设备&#xff0c;缺乏现代化的元素。这种传统感可能会…...

城市内涝与海绵城市规划设计中的水文水动力模拟

原文链接&#xff1a;城市内涝与海绵城市规划设计中的水文水动力模拟https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247601198&idx5&sn35b9e5e3961ea2f190f9742236a7217f&chksmfa820dc9cdf584df97633f64d19bdc3e5f7d1a5a85000c8f040e1953c51b9b39c87b5…...

C++项目实战与经验分享

在编程世界中,C++ 是一种功能强大且灵活的编程语言,广泛应用于系统级编程、游戏开发、嵌入式系统以及高性能计算等领域。本文将分享一个基于C++的图像处理系统项目实战经验,并深入探讨在开发过程中遇到的问题及解决方案。 一、项目概述 本次项目实战的目标是开发一个基于C…...

Day17_学点JavaEE_转发、重定向、Get、POST、乱码问题总结

1 转发 转发&#xff1a;一般查询了数据之后&#xff0c;转发到一个jsp页面进行展示 req.setAttribute("list", list); req.getRequestDispatcher("student_list.jsp").forward(req, resp);2 重定向 重定向&#xff1a;一般添加、删除、修改之后重定向到…...

Mouse IFN-α ELISA kit (Quick Test)

干扰素α&#xff08;IFN-α&#xff09;是一类由免疫细胞分泌的内源性调节因子&#xff0c;也被称为白细胞干扰素&#xff0c;主要参与响应病毒感染的先天性免疫。 基于结构特征、受体、细胞来源和生物活性的不同&#xff0c;干扰素可被分为Ⅰ、Ⅱ、Ⅲ三种类型&#xff0c;其中…...

AMD Tensile 简介与示例

按照知其然&#xff0c;再知其所以然的认知次序进行 1&#xff0c;下载代码 git clone --recursive https://github.com/ROCm/Tensile.git 2&#xff0c;安装 Tensile cd Tensile mkdir build cd build ../Tensile/bin/Tensile ../Tensile/Configs/rocblas_dgemm_nn_asm_full…...

Rust语言

文章目录 Rust语言一&#xff0c;Rust语言是什么二&#xff0c;Rust语言能做什么&#xff1f;Rust语言的设计使其适用于许多不同的领域&#xff0c;包括但不限于以下几个方面&#xff1a;1. 传统命令行程序&#xff1a;2. Web 应用&#xff1a;3. 网络服务器&#xff1a;4. 嵌入…...

排序算法之冒泡排序

目录 一、简介二、代码实现三、应用场景 一、简介 算法平均时间复杂度最好时间复杂度最坏时间复杂度空间复杂度排序方式稳定性冒泡排序O(n^2 )O(n)O(n^2)O(1)In-place稳定 稳定&#xff1a;如果A原本在B前面&#xff0c;而AB&#xff0c;排序之后A仍然在B的前面&#xff1b; 不…...

js打印页面源码 ,打印选取的容器里的内容,打印指定内容

js打印页面源码 &#xff0c;打印选取的容器里的内容&#xff0c;打印指定内容 效果 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge&…...

算法练习第五十天|123.买卖股票的最佳时机III、188.买卖股票的最佳时机IV

123. 买卖股票的最佳时机 III 188. 买卖股票的最佳时机 IV 123.买卖股票的最佳时机III class Solution {public int maxProfit(int[] prices) {//dp[i][j] 第i天买卖股票获得的最大利润/**j0不操作j1第一次持有j2第一次不持有j3第二次持有j4第二次不持有dp[i][0] dp[i-1][0]d…...

细胞世界:4.细胞分化(划区域)与细胞衰老(设施磨损)

(1)细胞凋亡 1. 概念&#xff1a;细胞凋亡可以比作城市的规划者主动拆除某些建筑来更新城市或防止危险建筑对市民的潜在伤害。这是一个有序的过程&#xff0c;由城市&#xff08;细胞内部&#xff09;的特定规划&#xff08;基因&#xff09;所决定。 2. 特征&#xff1a;细…...

社交媒体运营实战指南:从算法逻辑到内容变现的完整技能树

1. 项目概述&#xff1a;社交媒体技能库的构建与价值在信息爆炸的今天&#xff0c;社交媒体早已不是简单的“发发状态、看看朋友”的平台。无论是个人品牌塑造、产品推广、内容创作&#xff0c;还是求职招聘、行业洞察&#xff0c;社交媒体都扮演着至关重要的角色。然而&#x…...

如何做谷歌SEO排名优化?搞定高质量外链的4种高成功率技巧

很多刚接触谷歌SEO的朋友发现&#xff0c;自己的网站内容写了不少&#xff0c;可排名始终在搜索结果的五六页开外晃悠。排除掉网站技术层面的小毛病&#xff0c;最让大家头疼的往往就是外链。你可以把外链看作是其他网站给你的“信任投票”&#xff0c;如果投给你的都是些街边的…...

Apollo Save Tool:3步解决PlayStation存档管理难题的终极方案

Apollo Save Tool&#xff1a;3步解决PlayStation存档管理难题的终极方案 【免费下载链接】apollo-ps4 Apollo Save Tool (PS4) 项目地址: https://gitcode.com/gh_mirrors/ap/apollo-ps4 你是否曾为丢失珍贵的游戏进度而懊恼&#xff1f;是否在主机升级时面临数百个存档…...

教培机构管理越忙越乱?用对工具,比多雇两个人更高效

不少培训机构校长都有同样的感受&#xff1a;明明团队很拼&#xff0c;每天从早忙到晚&#xff0c;可机构依旧问题不断。招生线索散落在微信、表格、登记本里&#xff0c;跟进不及时就白白流失&#xff1b;排课全靠人工核对&#xff0c;老师冲突、教室撞期、调课通知不到位是常…...

基于物理信息神经网络与降阶模型的文物数字孪生保护框架

1. 项目概述&#xff1a;当文化遗产保护遇上科学计算与人工智能最近几年&#xff0c;我一直在关注一个交叉领域&#xff1a;如何用前沿的计算科学和人工智能技术&#xff0c;去解决那些看似传统、实则充满挑战的文物保护难题。这次分享的“基于SciML与数字孪生的文化遗产保护框…...

如何快速配置ComfyUI ControlNet预处理器:完整安装与使用指南

如何快速配置ComfyUI ControlNet预处理器&#xff1a;完整安装与使用指南 【免费下载链接】comfyui_controlnet_aux ComfyUIs ControlNet Auxiliary Preprocessors 项目地址: https://gitcode.com/gh_mirrors/co/comfyui_controlnet_aux ComfyUI ControlNet Aux预处理器…...

AI模型评估实战:从原理到实践,用Evaliphy简化评测全流程

1. 项目概述&#xff1a;当AI测试遇上“简化”难题最近和几个做AI应用开发的朋友聊天&#xff0c;大家不约而同地提到了同一个痛点&#xff1a;模型效果评估太折腾了。这让我想起自己去年折腾一个文本分类项目时的经历——为了评估模型在几个不同测试集上的表现&#xff0c;我写…...

告别信号混乱!手把手教你正确处理Qt QLineEdit的编辑完成与回车事件

告别信号混乱&#xff01;手把手教你正确处理Qt QLineEdit的编辑完成与回车事件 在Qt开发中&#xff0c;QLineEdit作为最常用的输入控件之一&#xff0c;其信号处理看似简单却暗藏玄机。许多开发者都曾遇到过这样的困扰&#xff1a;明明只想在用户完成编辑时触发一次验证逻辑&a…...

数据分析进阶——【连载 5/9】《Power BI数据分析与可视化案例教程》项目5 数据建模

Power BI 数据建模教程&#xff5c;推介总结 适应人群&#xff1a;数据分析师、业务分析人员、财务 / 运营 / 销售岗、高校学生、企业内训学员、Power BI 进阶学习者。 重要性总结&#xff1a;本文档是 Power BI 数据建模核心实操教程&#xff0c;系统讲解数据建模全流程&#…...

2026 AI大模型API加速网站推荐

在AI开发领域&#xff0c;一个现实问题始终困扰着开发者&#xff1a;如何接入模型厂商的官方API&#xff1f;在海外&#xff0c;注册、绑卡、调用这三个步骤就能轻松解决。然而&#xff0c;国内开发者面临着跨境网络波动、外币支付门槛、发票合规需求以及多厂商Key碎片化管理等…...