一、核心定义
单例模式是创建型设计模式的一种,核心目标是保证一个类在整个应用生命周期中只存在一个实例对象,同时提供全局唯一的访问入口,避免多实例导致的资源浪费或逻辑混乱。
二、核心要素(3 个,缺一不可)
- 私有构造方法:用
private修饰构造方法,禁止外界通过new关键字直接创建实例,从根源控制实例数量。 - 私有静态实例:在类内部声明一个
private static修饰的本类实例,作为全局唯一的实例对象(静态确保属于 “类级别”,而非 “对象级别”)。 - 公有静态访问方法:提供一个
public static修饰的方法(通常命名为getInstance()),作为外界获取单例实例的唯一入口。
三、两种常用实现方式
1. 饿汉式(立即加载)
实现代码
public class UserServiceIml {
// 1. 私有静态实例:类加载时直接创建(饿汉核心)
private static UserServiceIml instance = new UserServiceIml();
// 2. 私有构造方法:禁止外界new
private UserServiceIml() {}
// 3. 公有静态访问方法:直接返回已创建的实例
public static UserServiceIml getInstance() {
return instance;
}
// 业务方法(示例)
public ResponseDTO login(String account, String password) {
// 登录逻辑...
return new ResponseDTO();
}
}
核心原理
利用 Java 类加载机制 —— 类首次被加载到 JVM 时,静态变量 instance 会立即初始化并创建实例。由于 JVM 保证 “同一类仅加载一次”,因此饿汉式天然线程安全,无需额外处理。
优缺点
- 优点:实现简单,获取实例速度快(直接返回已创建的实例),无线程安全问题。
- 缺点:类加载时就创建实例,即使后续不使用,也会占用内存(可能造成资源浪费,适合实例创建成本低的场景)。
2. 懒汉式(延迟加载)
基础实现代码(注意:线程不安全)
public class UserServiceIml {
// 1. 私有静态实例:仅声明,不立即创建(懒汉核心)
private static UserServiceIml instance;
// 2. 私有构造方法:禁止外界new
private UserServiceIml() {}
// 3. 公有静态访问方法:使用时才创建实例
public static UserServiceIml getInstance() {
// 实例不存在时才创建
if (instance == null) {
instance = new UserServiceIml();
}
return instance;
}
// 业务方法(示例)
public ResponseDTO login(String account, String password) {
// 登录逻辑...
return new ResponseDTO();
}
}
核心原理
类加载时仅声明实例,不创建;只有外界首次调用 getInstance() 时,才判断实例是否存在 —— 不存在则创建,存在则直接返回,实现 “按需创建”(延迟加载)。
1万+

被折叠的 条评论
为什么被折叠?



