Java设计模式-单例模式
Java设计模式——单例模式
描述:确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例
特点:
1、单例类只能有一个实例
2、单例类必须自己创建自己的唯一实例
3、单例类必须给所有其他对象提供这一实例
线程安全问题:
1、在获取单例的时候,要保证不能产生多个实例对象
2、注意单例对象内的实例变量是会被多线程共享的
实现单例模式方式
1、饿汉式:静态变量,静态代码快
2、懒汉式:线程不安全 、线程不安全,并发小、双重检测锁模式,简称DCL懒汉式
3、静态内部类
4、枚举
一、饿汉式
1、静态变量
/*
* 静态变量方式
*/
public class SingletonHungry {
private SingletonHungry() {}
private final static SingletonHungry hungry = new SingletonHungry();
public static SingletonHungry getInstance() {
return hungry;
}
}
2、静态代码快
/*
* 静态代码快
*/
public class SingletonHungry {
private SingletonHungry() {}
private static SingletonHungry hungry;
static {
hungry = new SingletonHungry();
}
public static SingletonHungry getInstance() {
return hungry;
}
}
二、懒汉式
1、线程不安全
/*
* 线程不安全
*/
public class SingletonLazyMan {
private SingletonLazyMan() {}
private static SingletonLazyMan lazyMan;
public static SingletonLazyMan getInstance() {
if(null == lazyMan) {
lazyMan = new SingletonLazyMan ();
}
return lazyMan;
}
}
2、线程不安全,并发小
/*
* 线程不安全,并发小
*/
public class SingletonLazyMan {
private SingletonLazyMan() {}
private static SingletonLazyManlazyMan;
public static synchronized SingletonLazyMan getInstance() {
if(null == lazyMan) {
lazyMan = new SingletonLazyMan();
}
return lazyMan;
}
}
3、双重检测锁模式:简称DCL懒汉式
/*
* 效率高,延迟加载,线程安全,推荐使用
*/
public class SingletonLazyMan{
private SingletonLazyMan() {}
private volatile static SingletonLazyMan lazyMan;
// 双重检测锁模式,简称DCL懒汉式
public static SingletonLazyMan getInstance() {
if(null == lazyMan) {
synchronized (SingletonLazyMan.class) {
if(null == SingletonLazyMan) {
lazyMan = new SingletonLazyMan();
}
}
}
return lazyMan;
}
}
三、静态内部类
静态内部类
/*
* 避免了线程不安全,延迟加载,效率高,推荐使用
*/
public class SingletonStaticInner {
private SingletonStaticInner() {}
private static class InnerClass{
private static final SingletonStaticInner INSTANCE = new SingletonStaticInner();
}
public static SingletonStaticInner getInstance() {
return InnerClass.INSTANCE;
}
}
四、枚举
枚举
/*
* 防止反射破坏,推荐使用
*/
public enum EnumSingle {
INSTANCE;
public EnumSingle getInstance(){
return INSTANCE;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix