单例模式(Singleton Pattern)是一种常用的软件设计模式,属于创建型模式。它确保一个类只有一个实例,并提供一个全局访问点来访问该实例。单例模式通常用于控制资源的访问,例如数据库连接、线程池、日志对象等。
在Java中,单例模式有多种实现方式,每种方式都有其优缺点。下面我们将介绍几种常见的实现方式。
饿汉式单例模式在类加载时就创建了单例实例,因此它是线程安全的。
public class EagerSingleton {
// 在类加载时就创建实例
private static final EagerSingleton instance = new EagerSingleton();
// 私有构造函数,防止外部实例化
private EagerSingleton() {}
// 提供全局访问点
public static EagerSingleton getInstance() {
return instance;
}
}
优点: - 实现简单,线程安全。
缺点: - 如果单例类从未被使用,会造成资源浪费。
懒汉式单例模式在第一次使用时才创建实例,延迟了实例的创建。
public class LazySingleton {
private static LazySingleton instance;
// 私有构造函数,防止外部实例化
private LazySingleton() {}
// 提供全局访问点
public static synchronized LazySingleton getInstance() {
if (instance == null) {
instance = new LazySingleton();
}
return instance;
}
}
优点: - 延迟了实例的创建,节省了资源。
缺点: - 每次获取实例时都需要同步,性能较差。
双重检查锁定(Double-Checked Locking)是一种改进的懒汉式单例模式,它通过双重检查来减少同步的开销。
public class DoubleCheckedSingleton {
private static volatile DoubleCheckedSingleton instance;
// 私有构造函数,防止外部实例化
private DoubleCheckedSingleton() {}
// 提供全局访问点
public static DoubleCheckedSingleton getInstance() {
if (instance == null) {
synchronized (DoubleCheckedSingleton.class) {
if (instance == null) {
instance = new DoubleCheckedSingleton();
}
}
}
return instance;
}
}
优点: - 延迟了实例的创建,且只在第一次创建实例时同步,性能较好。
缺点:
- 实现较为复杂,需要注意volatile
关键字的使用。
静态内部类单例模式利用了类加载机制来保证线程安全,同时实现了延迟加载。
public class StaticInnerClassSingleton {
// 私有构造函数,防止外部实例化
private StaticInnerClassSingleton() {}
// 静态内部类
private static class SingletonHolder {
private static final StaticInnerClassSingleton INSTANCE = new StaticInnerClassSingleton();
}
// 提供全局访问点
public static StaticInnerClassSingleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
优点: - 线程安全,延迟加载,实现简单。
缺点: - 无法传递参数给单例实例。
枚举单例模式是《Effective Java》作者Joshua Bloch推荐的一种实现方式,它不仅能避免多线程同步问题,还能防止反序列化重新创建新的对象。
public enum EnumSingleton {
INSTANCE;
public void doSomething() {
// 单例类的业务方法
}
}
优点: - 线程安全,防止反序列化,实现简单。
缺点: - 无法继承其他类。
单例模式是一种简单但强大的设计模式,适用于需要全局唯一实例的场景。不同的实现方式各有优缺点,开发者应根据具体需求选择合适的实现方式。在实际开发中,应谨慎使用单例模式,避免滥用导致系统复杂性和维护成本的增加。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。