单例模式(懒汉式、饿汉式)

devtools/2024/9/22 16:55:50/
一、普通情况

正常在实体类下定义一个属性,在测试类中去创建他两次,此时stu1和stu2的内存地址不同

public class Student {private String name;
}
二、单例模式
(一) 懒汉式
  • 在实体类下设计私有的构造方法,导致在测试类中无法new一个student对象;所以只能通过调用方法得到对象
  • 准备一个类属性,用于指向一个实例化对象,但是暂时指向null private static Student stu;
  • 提供一个公有的方法,第一次访问的时候,发现stu没有指向任何对象,这时实例化一个对象 stu = new Student(); 存在则直接返回当前的stu

在懒汉式下,stu1和stu2的内存地址相同

//代码
public class Student {private static Student stu;private Student(){super();}public static synchronized Student getInstance(){if(stu == null){stu = new Student();}return stu;}
}
(二) 饿汉式
  • 在实体类下设计私有的构造方法,导致在测试类中无法new一个student对象;所以只能通过调用方法得到对象
  • 准备一个类属性,指向一个实例化对象,private static Student stu= new Student();
  • 提供一个公有的方法,直接返回上方定义的对象stu

在饿汉式下,stu1和stu2的内存地址相同

public class Student {private static Student stu = new Student();private Student(){super();}public static synchronized Student getInstance(){return stu;}}
三、测试
//用于测试懒汉式和饿汉式
public class Test01 {public static void main(String[] args) {Student stu1 = Student.getInstance();Student stu2 = Student.getInstance();System.out.println(stu1== stu2);}
}
//懒汉式和饿汉式的结果都为:true//用于测试普通情况
public class Test02 {public static void main(String[] args) {Student stu1 = new Student();Student stu2 = new Student();System.out.println(stu1==stu2);}
}
//结果为:false
四、饿汉式与懒汉式的区别

饿汉式是立即加载的方式,无论是否会用到这个对象,都会加载。如果在构造方法里写了性能消耗较大,占时较久的代码,那么就会在启动的时候时间稍长

懒汉式是延迟加载的方式,只有使用的时候才会加载。 并且有线程安全的考量。使用懒汉式,在启动的时候,会感觉到比饿汉式略快,因为并没有做对象的实例化。 但是在第一次调用的时候,会进行实例化操作,感觉上就略慢。

五、总结

单例模式三要素:

  • 构造方法私有化
  • 静态属性指向实例
  • public staticgetlnstance方法,返回自己创建的静态属性

http://www.ppmy.cn/devtools/92593.html

相关文章

四数相加2 | LeetCode-454 | 哈希集合 | Java详细注释

🙋大家好!我是毛毛张! 🌈个人首页: 神马都会亿点点的毛毛张 🕹️思路:四数相加 > 两数相加 📌LeetCode链接:454. 四数相加 II 文章目录 1.题目描述🍎2.题解&#x…

工厂模式和策略模式的核心区别与最佳实践

工厂模式和策略模式的核心区别与最佳实践 在软件设计中,设计模式是解决特定问题的常用方法。工厂模式(Factory Pattern)和策略模式(Strategy Pattern)是两种非常重要的设计模式,广泛应用于Java开发中。尽管…

spingboot mongoDB实现文件的上传、下载、预览

pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0…

开源应用:AI监测如何成为社会安全的智能盾牌

社会背景 随着社会的快速发展&#xff0c;社会安全管理正站在一个新时代的门槛上。社会对安全管理的需求不断增长&#xff0c;传统的安全措施已难以满足现代社会的需求。AI技术以其独特的数据处理和模式识别能力&#xff0c;正在成为我们社会安全的智能盾牌。 AI大模型识别功能…

计算机毕业设计选题推荐-电缆行业生产管理系统-Java/Python项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

Codeforces Round 961 【C. Squaring】

C. Squaring 题目大意&#xff1a; 给你一个长度为n的数组&#xff0c;求最少次操作&#xff0c;使得数组&#xff08;非严格&#xff09;递增。一次操作&#xff1a;Ai 变为 Ai^2。 不可能实现输出-1。 关键思路&#xff1a; 分子分母同时取对数&#xff0c;比值不变。 …

代码随想录算法训练营 | 贪心算法 part01

贪心的本质是选择每一阶段的局部最优&#xff0c;从而达到全局最优。 什么是局部最优&#xff0c;局部最优能否推出全局最优&#xff08;举反例 举不出来的时候就可以试试贪心&#xff09; 455.分发饼干 455.分发饼干 局部最优&#xff1a;大饼干就要优先分给胃口大的孩子&am…

.ps1文件执行报错,但是相同的代码直接复制到windows powershell里面能成功执行。

报错&#xff1a; “magick”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写&#xff0c;如果包括路径&#xff0c;请确保路径正确&#xff0c;然后再试一次。 所在位置 C:\Users\23121\Desktop\pic2mark.ps1:9 字符: 1 magick $inputFilePath $output…