23种设计模式-单例(Singleton)设计模式
单例设计模式
- 🚩什么是单例设计模式?
- 🚩单例设计模式的特点
- 🚩单例设计模式的结构
- 🚩单例设计模式的优缺点
- 🚩单例设计模式的Java实现
- 🚩代码总结
- 🚩总结
🚩什么是单例设计模式?
单例模式(Singleton Pattern) 是 创建型设计模式,它确保 一个类只有一个实例,并提供 全局访问点 以获取该实例。
使用场景
-
需要保证全局唯一性的对象,如 日志管理器、数据库连接池、缓存管理器 等。
-
需要共享资源,避免创建多个实例导致资源浪费。
-
需要控制对象的访问,如 线程池,只能有一个管理者控制线程分配。
🚩单例设计模式的特点
-
全局唯一性:整个应用程序中只能有一个实例。
-
提供全局访问点:外部只能通过
getInstance()
获取实例。 -
延迟加载(可选):可以实现 懒加载,只有在需要时才创建实例,减少资源占用。
-
线程安全(可选):可以采用 同步机制 确保在多线程环境下仍然保证唯一性。
🚩单例设计模式的结构
单例模式主要包含以下部分:
-
Singleton(单例类):提供 私有构造方法,确保外部不能创建对象,并提供 公共
getInstance()
方法 访问唯一实例。 -
Client(客户端):通过
getInstance()
方法访问单例对象。
🚩单例设计模式的优缺点
✅ 优点
-
全局唯一性:保证只有一个实例,避免资源浪费。
-
控制实例个数:防止创建多个对象,影响性能或逻辑错误。
-
提供全局访问点:可以随时访问,无需每次创建新实例。
❌ 缺点
-
可能引起全局状态问题:单例是 全局对象,在某些情况下可能导致难以调试的状态问题。
-
不适用于多线程(非线程安全实现):如果不加锁,多线程环境下可能会创建多个实例。
-
增加代码复杂度:如果实现线程安全的单例模式(如 双重检查锁定),代码会变得更复杂。
🚩单例设计模式的Java实现
代码地址:GitHub
- 创建单例类,
instance
存储唯一实例,确保全局唯一性,private Singleton()
防止外部创建新实例,getInstance()
提供全局访问点。
/**
* @author hanson
* @description:
* @date 2025-03-23 23:37:21
* @version: 1.0
*/
public class Singleton {
private int number = 2025;
public void setNumber(int number) {
this.number = number;
}
public int getNumber() {
return number;
}
// 1. 创建私有静态实例
private static Singleton instance = new Singleton();
// 2. 构造方法私有化,防止外部实例化
private Singleton() {
}
// 3. 提供公共方法获取实例
public static Singleton getInstance() {
return instance;
}
}
- 测试单例模式
/**
* @author hanson
* @description:
* @date 2025-03-23 23:39:39
* @version: 1.0
*/
public class SingletonPattern {
public static void main(String[] args) {
// Singleton singleton1 = new Singleton(); // 不能直接实例化
Singleton singleton1 = Singleton.getInstance();
Singleton singleton2 = Singleton.getInstance();
Singleton singleton3 = Singleton.getInstance();
System.out.println(singleton1.getNumber() + " " + singleton2.getNumber() + " " + singleton3.getNumber());
singleton1.setNumber(528);
System.out.println(singleton1.getNumber() + " " + singleton2.getNumber() + " " + singleton3.getNumber());
}
}
📌 运行结果
🚩代码总结
-
私有静态变量
instance
存储唯一实例,确保全局唯一性。 -
私有构造方法
private Singleton()
防止外部创建新实例。 -
公有静态方法
getInstance()
提供全局访问点。
🚩总结
-
单例模式(Singleton Pattern) 确保 一个类只有一个实例,并提供 全局访问点 获取该实例。
-
适用于 日志管理器、数据库连接池、线程池等 需要全局唯一实例的场景。
-
Java 实现 需要 私有化构造方法,并提供 静态方法返回唯一实例。
✅ 适用场景:
-
需要 保证全局唯一性 的对象,如 日志管理器、线程池、数据库连接池 等。
-
需要 共享资源,避免创建多个实例导致资源浪费。
-
需要 控制对象的访问,防止多个实例同时操作数据。
创作不易,不妨点赞、收藏、关注支持一下,各位的支持就是我创作的最大动力❤️