一、单例模式

  • 目的 : 确保一个类只有一个实例,并提供全局访问点。
  • 核心 : 私有化构造函数,提供静态方法获取唯一实例。
  • 场景 : 全局配置(如数据库连接、系统参数),全局共享的缓存实例(如 Redis 客户端、内存缓存)
java 复制代码
public class Singleton {
	private static volatile Singleton instance;  	// volatile 防止指令重排序,保证拿到的是完整对象

	private Singleton(){ }

	public static Singleton getSingleton() {

		if(instance == null){						// 第一次检查(非同步,提高性能) 点菜,第一次叫服务员,服务员先看看有没有订单
			synchronized (Singleton.class) {		// 同步块	获得 Singleton.class 这个类对象的锁 一个包间里面只能进一个服务员
				if(instance == null){				// 第二次检查(防止重复创建)	  服务员A、B都看见订单是空的,同时来到包间前。A获得锁进入包间,
					instance = new Singleton();		// 通过第二次检查成功下单,然后释放锁走出包间。此时B才获得锁进入包间,检查到A已经下单,所以直接返回创建好的订单。
				}
			}
		}
		return instance;
	};
}

这是单例模式的类图

各种符号代表的意思

复制代码
+ 	Public(公有)

-	Private(私有)

#	Protected(受保护)

~	Package(包内/默认)
相关推荐
珊瑚里的鱼2 天前
手撕单例模式中的饿汉模式和懒汉模式,懒汉模式还要再多加一个C++11版本的
开发语言·c++·单例模式
韩曙亮3 天前
【Flutter】Dart 单例 ( 单例模式核心规则 | 饿汉式单例 | 懒汉式单例 | 极简空安全 懒汉式单例 | 工厂构造函数单例 )
flutter·单例模式·dart·饿汉式单例·懒汉式单例·空安全·空赋值
wunaiqiezixin5 天前
如何在C++中实现一个单例模式?
c++·单例模式
basketball6165 天前
设计模式入门:1. 单例模式详解 C++实现
c++·单例模式·设计模式
bugcome_com5 天前
阿里云OSS工具类完整设计与实现:基于.NET的静态单例模式实践
阿里云·单例模式·.net·oss
JAVA9655 天前
JAVA面试-并发篇 03-使用synchronized doublecheck实现单例有什么坑
java·单例模式·面试
HEADKON9 天前
司拉德帕失代偿期肝硬化及胆道梗阻患者禁止使用,肝酶升高需暂停药物
单例模式
IT空门:门主11 天前
Java 单例模式详解:7 种实现方式 + volatile 原理 + 反射与序列化问题
java·开发语言·单例模式
码农的小菜园11 天前
Java创建单例
java·开发语言·单例模式