Java项目里常见的模式

Java常见设计模式面试题 常见面试题 设计模式 工厂模式(Factory pattern) 观察者模式(Observer pattern) 重载 线程安全的单例模式 阅读详情

目录

1.单例模式

2.工厂模式

3.代理模式

一.单例模式

1.模式的目的:保证一个类在整个程序中,有且仅有一个实例,让我们创建的对象指向的都是同一个

2.两种经典的单例模式:饿汉式和懒汉式

(一)饿汉式:顾名思义,在类开始加载的时候就创建实例,不过可能会造成浪费

这里会相应的输出true。

我们现在对左边代码进行一下理解【有大量对基础知识的解释】

第一段:【private static Singleton singleton=new Singleton();】这里的变量用private修饰的目的是让外部无法改变这个变量(就是重新给它赋值),然后static是为了让变量始终是同一个,所以这段代码总结下来就是在程序开始执行的时候就new了一个固定的singleton对象在Singleton类里,并且不能修改,拿到的始终的都是它

第二段:private修饰的一个构造方法,它的目的是让用户无法创建新的对象,实现单例

(1)在这我一开始产生了一个误区:第二段的目的是让用户无法创建新的对象,但第一段中static修饰的变量不是让它始终都指向的同一个,我就算new了很多个不应该都指向的同一个。

对于这个误会的解释:如果不用private修饰的话,可以new很多对象,每new一个新对象会在堆上创建一个新的,并且就可以直接指向这个新的,如下有一个比较好的例子

把这个类想象成一个工厂:

  • static singleton 是工厂仓库里提前放好的 “唯一指定产品”

  • new Singleton() 是直接开了一条新生产线,造了一个全新的产品

小总结:所以private修饰是为了只有一条生产线,再结合static就可以指向唯一的一个

我们可以通过代码一起很好的对此进行理解【我们在Singleton类里新增一个方法,来拿到创建对象的地址,可以发现这两个通过private构造方法拿到的都指向同一个】

【我们现在去掉private修饰的构造方法,不自己创建构造方法,使用Java默认给的】

通过代码可以清晰的看到没有private修饰的构造方法的后果,也只有s1是拿到了方法里static修饰的变量

第三段:提供了一个用static修饰的getSingleton方法,这里static的作用有两个,第一就是为了在类外拿到这个静态对象,因为private的构造方法让外部无法创建对象,static修饰后可以通过方法名来创建对象,第二就是静态方法只能访问静态对象,这样单例模式就完美形成了闭环。

(二).懒汉式:特点:用到时才创建(懒加载),但多线程下会创建多个实例

在你通过getInstance方法构造了对象前会先判断这个变量之前有没有被创建过,如果被创建了就会返回之前创建的变量,来实现单例

二.工厂模式

(1).在使用工厂模式前我们需要抽象产品,具体的产品,抽象工厂,具体工厂

(2).工厂模式的好处:我们无需记住复杂的类名,我们只需要通过自己创建的类名来点出我们想要的类,并且不需要new很多对象出来,下面我来用不同身份的例子来展示一下

三:代理模式

Java 中代理分为 静态代理 和 动态代理,我们以静态代理为例

作用:为一个对象提供一个代理对象,由代理对象控制对原对象的访问,且不修改原对象代码,就能对原功能进行增强。

我们在AdminUser和NormalUser类里面分别加上加图书和借阅图书的方法,并且创建一个代理类ProxyUser,在这个类里面可以验证传入user的类型来调用对应的方法,也可以在这个类里面加上一些改错的方法等,类似于ProxyUser类在对另外两个类进行代理

基于STM32与FPGA的数据采集系统的设计与实现 数据采集系统在现代工程中起着至关重要的作用,用于实时获取和处理各种传感器或外部设备的数据。在本文中,我们将探讨如何基于STM32微控制器和FPGA(现场可编程门阵列)实现一个高效的数据采集系统。我们可以使用STM32的UART、SPI或I2C接口与各种传感器或外部设备进行通信,并通过GPIO口实现控制功能。在硬件连接完成后,我们可以通过STM32控制FPGA的配置和数据传输。STM32作为主控单元负责与外部设备进行通信和数据处理,而FPGA则用于高速数据采集和实时处理。具体的通信协议取决于连接的设备类型。 阅读详情

相关推荐

CAN通信:EB中配置CAN驱动,配置参数解析

以S32K314芯片说明,其他芯片不同,参数配置也有差异。

zhangxiaio1的博客 2174

Java 项目里的 Elasticsearch 最佳实践清单

这篇「Java项目Elasticsearch最佳实践清单」提供了工程化落地方案,涵盖索引设计、写入优化、查询分页、运维管理等全流程。核心要点包括:1)索引建模推荐text+keyword双字段、nested结构处理动态属性;2)写入采用Bulk批量+指数退避重试,查询使用filter缓存和search_after分页;3)运维通过别名实现零停机切换,结合ILM管理数据生命周期;4)Java客户端需配置连接池和限流策略,Spring集成注意字段映射;5)性能方面建议分片10-50GB、避免深分页,提供慢日志排

weixin_46072507的博客 861

CTFshow-CRYPTO(持续更新)

密码学签到 }wohs.ftc{galf 将字符串逆序即可 letters = '}wohs.ftc{galf' a = list(letters) a.reverse() for letters in a: print(letters,end='') crypto2 打开浏览器的控制台,复制粘贴回车即可得到flag crypto3 这一题同上 crypto4 如图填写即可,一开始e填写的是17,一直回答错误,后来经过群内大佬提醒软件的e是十六进制的,17转十六进制就是0x11 cr

i_kei的博客 1万+

Java常见设计模式面试题及答案

文章目录1.设计模式是什么?你是否在代码中使用过?2. JDK 中常用的设计模式有哪些?3.单例模式是什么?请用 Java 写出线程安全的单例模式4.在 Java 中,什么叫观察者模式(observer design pattern)?5.使用工厂模式有哪些好处?说说它的应用场景?6.举一个 Java中 实现装饰模式的例子?7.在 Java 中,什么时候用重载,什么时候用重写?8. Java 是否可以从静态方法中访问非静态变量?为什么?9.什么情况下更倾向于使用抽象类而非接口? 前 &

weixin_42208959的博客 1万+

Word论文插入带有方括号序号的参考文献——尾注+交叉引用

文章目录1. 尾注功能2. 为参考文献的序号添加方括号3. 调整参考文献前的序号大小4. 重复引用同一参考文献5. 将交叉引用的序号改为带有方括号的上标序号格式6. 删除参考文献前的尾注横线 1. 尾注功能 首先使用尾注功能顺序插入参考文献,暂时不考虑方括号问题,具体操作如下: ① 将光标放在需要插入参考文献角标的地方 ② 在word菜单栏,“引用-脚注部分右下角箭头”(用来设置尾注格式) ③如...

Your_Raymond的博客 9万+

Java常见设计模式

Java的常见设计模式

WZX17307935391的博客 3336

Vivado FFT IP核配置与实战:FPGA信号处理硬件加速指南

快速傅里叶变换(FFT)是数字信号处理(DSP)中的核心算法,用于将时域信号转换到频域进行分析。其原理基于离散傅里叶变换(DFT),通过蝶形运算的分解与复用,大幅降低了计算复杂度。在工程实践中,软件实现的FFT难以满足高速实时处理的需求,因此硬件加速方案至关重要。FPGA凭借其并行架构和可定制性,成为实现高性能FFT的理想平台。通过集成专用的FFT IP核,如Vivado中的Pipelined Streaming I/O架构,可以构建流水线化的计算引擎,实现极低延迟和高吞吐量的连续数据流处理。这种硬件方案特

weixin_42536863的博客 649

Java 常见的设计模式

设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理地运用设计模式可以完美地解决很多问题,每种模式在现实中都有相应的原理来与之对应,每种模式都描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是设计模式能被广泛应用的原因。

TuSi_Cat的博客 2107

被Cloudflare 5秒盾虐了半个月,终用Python破局:UA+TLS指纹伪装实战,拦截率从42%干到3%

其实5秒盾不难破,难的是摸透它的检测逻辑——它不是“一刀切”地拦截爬虫,而是通过“多维度指纹校验”,判断你是不是“真实用户”。表层:UA和HTTP头要完整、匹配;中层:TLS指纹要和真实浏览器一致(核心);深层:行为要符合人类习惯(请求间隔、JS执行)。这套方案不仅适用于Cloudflare 5秒盾,很多基于指纹检测的反爬系统(如Akamai、Imperva)也适用。2025年的爬虫,早已不是“能爬就行”,而是“爬得稳、不被封”——指纹伪装就是实现这一点的关键。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1851

Cesium 实现动态加载气象数据:渲染成动态雨雪/云层效果(源码 + 原理)

本文介绍了在Cesium中实现动态天气效果的技术方案。核心思路是通过时间轴驱动多层数据动态切换,包括:1)时间维度处理,按序列加载不同气象图层;2)空间维度处理,将气象数据切分为瓦片;3)效果层实现,制作风场、降水等动态可视化效果。文章详细讲解了后端数据预处理(生成瓦片和风场JSON)、前端实现(双层雷达瓦片交替渐变、风场粒子系统)的具体方法,并提供了完整的代码示例。此外还探讨了雨雪粒子、云层效果等增强功能,以及工程化建议,为构建科学准确的动态天气可视化系统提供了实用解决方案。

专注AI大模型,软件混淆,授权 625

Java设计模式学习项目常见问题解决方案

Java设计模式学习项目常见问题解决方案 1. 项目基础介绍与主要编程语言 本项目是一个开源的Java设计模式学习项目,旨在帮助初学者和有经验的开发者巩固Java设计模式的知识。项目包含了多种设计模式的实现和测试案例,例如回调机制、装饰模式、策略模式和模板模式等。项目主要使用Java编程语言开发。 2. 新手常见问题与解决方案 问题一:如何运行测试案例? 问题描述: 新手可能不知道如何运行项目中的...

gitblog_00067的博客 410

ESP32设备驱动-AS5600磁性旋转位置传感器

AS5600 是一款可编程的 12 位高分辨率非接触式磁性旋转位置传感器。 AS5600可以作为磁性电位器或磁性编码器使用,具有出色的可靠性和耐用性。 与传统电位器/编码器相比,AS5600具有显着优势:高精度、非接触式、旋转角度无限制。 所有这些优点使其适用于非接触式角度测量应用,例如机器人手臂、云台、电机闭环控制、机床轴定位。

视觉与物联智能 2553

Java常见的23种设计模式

大家好,我是钢板兽! 本文将系统梳理 Java 的设计模式,涵盖创建型、结构型和行为型三大类,结合定义、原理、优点、应用场景、示例代码,帮助你初步了解常见的23种设计模式。

weixin_49426115的博客 2481

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Java八种常见的设计模式

Java八种常见的设计模式

qq_41206014的博客 1518

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Java设计模式项目教程

Java设计模式项目教程 项目介绍 Java设计模式项目(JavaDesignPattern)是一个开源项目,旨在帮助开发者理解和应用Java中的设计模式。设计模式是软件开发中常见问题的解决方案,它们提供了一种标准化的方法来解决特定类型的问题。通过学习和应用这些模式,开发者可以提高代码的可维护性、可扩展性和可重用性。 该项目包含了多种常见的设计模式实现,如单例模式、工厂模式、观察者模式等。每个模式...

gitblog_00394的博客 892

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

java常见的设计模式

本篇文章简介了什么是设计模式,介绍了其中比较常见的几种,如单例模式,工厂模式,装饰模式和代理模式。

2303_76782197的博客 2187

java中常见的设计模式以及常见的面试题

建造者模式是一种创建型设计模式,它将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。例如,假设我们有一个旧的类库,它提供了一些方法来完成特定的任务,但新的代码需要调用不同的方法来完成相同的任务。这时,我们可以创建一个适配器类,该类包装旧类库中的对象,并提供新的接口方法,以便新代码可以调用这些方法来完成任务。例如,在游戏开发中,角色、怪物等对象可能需要频繁创建,使用原型模式可以避免重复初始化,直接复制已有对象的状态来创建新对象。:请描述工厂模式,并给出一个Java中的使用场景。

weixin_43784341的博客 1548

Java设计模式之禅:深入掌握设计模式的最佳开源项目

Java设计模式之禅:深入掌握设计模式的最佳开源项目 去发现同类优质开源项目:https://gitcode.com/ 项目的核心功能/场景 深入浅出学习Java设计模式,提升编程思维与代码质量。 项目介绍 在软件开发的世界里,设计模式是提高代码可读性、可维护性的重要工具。《Java设计模式之禅》作为一本深入浅出的设计模式学习资料,以其系统的内容结构和实用的案例解析,成为Java开发者学习设计模式...

gitblog_06761的博客 876

java常见的几种设计模式

java常见的几种设计模式

snmkc_csdn的博客 8954

java常见的架构模式

在 Java 生态中,常见的架构模式(Architectural Patterns)旨在解决和问题。

小新的博客 1131

(Java基础笔记log)Java中常见的几种设计模式详解

在 Java 编程里,设计模式是被反复使用、多数人知晓的、经过分类编目的代码设计经验总结。他能帮助开发者更高效地解决常见问题,提升代码的可维护性、可扩展性和复用性。下面介绍几种 Java 中常见的设计模式。

不积跬步,无以至千里;不积小流,无以成江河。 835

Java最常见设计模式:单例模式、工厂模式和代理模式

一、设计模式的分类 总体来说23种设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 我们主要来了解一下: 单例模式(Singleton) 简单的工厂模式(Factory) 代理模式(Proxy) 1. 单例模式

huangdong50的博客 3433

Java中常见的设计模式

定义:抽象工厂模式提供一个接口,用来创建一系列相关或相互依赖的对象,而无需指定具体的类。应用场景:需要创建一系列相关的对象,而无需指定具体类。用于产品族的创建,确保一系列相关的对象符合某种约定。示例代码:// 1. 定义抽象产品接口:ProductA// 2. 具体产品A1// 3. 具体产品A2// 4. 定义抽象产品接口:ProductB// 5. 具体产品B1// 6. 具体产品B2// 7. 定义抽象工厂接口// 8. 具体工厂A1。

xiaoyezhiei的博客 1478

Java中的常见的设计模式总结

光给面试题不给答案不是我的风格。这里面的面试题也只是凤毛麟角,还有答案的话会极大的增加文章的篇幅,减少文章的可读性。

2401_84557547的博客 581

InnoDB 内存结构总览:Change Buffer、AHI 与 Log Buffer

本文系统梳理InnoDB内存结构中的ChangeBuffer、Adaptive Hash Index(AHI)与LogBuffer。ChangeBuffer缓存二级索引页不在内存时的变更,减少随机IO,仅在页加载时合并;聚簇索引修改立即执行,因数据本身不可延后。AHI基于高频等值查询自动构建哈希索引,加速定位,仅支持等值操作。LogBuffer为redo log内存缓冲,配合磁盘日志实现崩溃恢复。三者均服务于性能优化,其中ChangeBuffer与AHI共享BufferPool空间,而LogBuffer独立

bksczm的博客 296
上一篇: 异常的认识
下一篇: Java数据结构1
忙着追剧的村长
博客等级 码龄1年 586粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值