返回
用设计模式玩转单例,让程序更优雅
前端
2024-02-13 16:25:08
玩转设计模式(单例模式)
「这是我参与11月更文挑战的第6天,活动详情查看:2021最后一次更文挑战」。
序言
单例模式在实际工作中的应用场景非常多,概念非常简单,就是整个程序中,有且只允许有一个实例。例如:我们程序中存放一个全局配置对象,全局只允许有一个配置对象,那么就可以采用单例模式来实现。
单例模式的实现
单例模式的实现有很多种,最简单的一种是使用饿汉式单例,代码如下:
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}
饿汉式单例在类加载的时候就创建了实例,保证了单例,但是也有缺点,就是无论是否用到这个实例,都会创建,造成了资源的浪费。
另一种实现方式是懒汉式单例,代码如下:
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
懒汉式单例在第一次调用 getInstance
方法的时候才创建实例,避免了资源的浪费,但是存在线程安全问题,需要使用同步机制来保证线程安全。
单例模式的应用场景
单例模式的应用场景非常广泛,例如:
- 全局配置对象
- 数据库连接池
- 线程池
- 缓存
单例模式的优缺点
优点:
- 保证了对象只有一个实例
- 减少了对象的创建,提高了性能
- 方便对对象进行控制和管理
缺点:
- 饿汉式单例会造成资源浪费
- 懒汉式单例存在线程安全问题
总结
单例模式是一种非常有用的设计模式,可以保证对象只有一个实例,减少对象的创建,提高性能。但是,在使用单例模式的时候,需要注意其优缺点,并根据实际情况选择合适的实现方式。