(一)单例模式
java中一共有23种设计模式 : 是开发人员根据不同的代码场景总结出来的不同的实现方法, 归纳为23种代码的设计方法, 单例模式就是其中的一种。
单例模式 : 在整个系统中,一个类型,只有一个对象,所有的场景下使用的都是同一个对象
单例模式的案例 :
1)回收站——因为整个系统中只有一个回收站, 在任何的场景下删除文件,都是进入到这一个回收站中。
2)任务管理器 —— ctrl+alt+delete 快捷键可以打开任务管理器, 系统中的所有的进程都在一个任务管理器中管理和展示。
解释:单例模式其实就是一个只能创建一个唯一对象的类
单例模式设计思路 :
- 私有构造方法 【限制外界创建对象】
- 在本类中创建出一个唯一的私有对象 【避免外界修改】
- 对外提供唯一对象的公共访问方式
(二)格式
1、饿汉式
-私有的构造方法;
-在类中创建唯一的使用private static 修饰的对象
-对唯一的对象提供对外公共访问方式
public class HungrySingleDemo {
private HungrySingleDemo() {
}
//饿汉式--直接创建私有化的对象
private static HungrySingleDemo hsd = new HungrySingleDemo();
//提供访问方式
public static HungrySingleDemo getInstance() {
return hsd;
}
}
访问:
public static void main(String[] args) {
HungrySingleDemo instance = HungrySingleDemo.getInstance();
System.out.println(instance);
}
2、懒汉式
实现过程:
1、创建私有构造;
2、在类型中声明一个私有的,静态的类型变量;
3、提供对外的公共访问唯一对象的方法;
注意:1)为了不重复执行创建对象,方法中需要判断对象的值不为null;
2)为了多线程对象唯一,需要在方法中添加同步代码块,保证多线程也只有一个对象;
3)由于线程安全的同步代码块性能差,因此需要添加【 双重判断锁】。
public class LazySingleDemo {
//提供私有构造
private LazySingleDemo() {
}
//声明一个引用类型的变量
private static LazySingleDemo lsd;
//对外提供公共的访问方式
public static LazySingleDemo show() {
//为了解决线程安全问题每次进来都要去对锁进行判断 如果已经有对象 不需要去创建对象
//【有对象就不在继续去创建单例的对象直接返回该对象,提升了代码执行效率】
if(lsd == null) {
synchronized("A") {
if(lsd == null) {
lsd = new LazySingleDemo();
}
}
}
return lsd;
}
}
public class DemoTest {
public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
LazySingleDemo show = LazySingleDemo.show();
System.out.println(show);
}
}).start();
}
}
3、老汉式
老汉式单例的实现:
私有构造;类中提供以一个public static final 修饰的对象
package com.tlc.single;
/**
* 单例模式之老汉式
* @author 喵了个@汪
*
*/
public class OlderSingleDemo {
//私有构造
private OlderSingleDemo() {
}
//提供唯一的对象的公共的访问方式
public static final OlderSingleDemo osd = new OlderSingleDemo();
}
访问:
//访问方式:直接类名访问
OlderSingleDemo osd = OlderSingleDemo.osd;
以上部分如有错误之处,欢迎各位大佬留言解释,谢谢!
版权声明:本文为优快云博主「喵了个@汪」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/weixin_44919512/article/details/119487021
如果看完对你的学习有帮助,感谢点赞支持!