返回
单例模式(Singleton):让对象只能实例化一次,详解其实现方式
Android
2023-12-14 05:34:34
单例模式的实现方式
同步锁
同步锁是最简单的一种实现方式,它通过在创建实例时对一个共享资源进行加锁来确保只有一个实例。以下是Java中使用同步锁实现单例模式的示例代码:
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
双检锁式
双检锁式是在同步锁的基础上进行改进的一种实现方式。它通过两次检查实例是否存在来减少对共享资源的加锁次数,从而提高性能。以下是Java中使用双检锁式实现单例模式的示例代码:
public class Singleton {
private static volatile Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
饿汉式
饿汉式是在类加载时就创建实例的一种实现方式。这种方式可以保证单例对象的创建是线程安全的,但它也会导致在不需要使用该对象时也创建了它,从而浪费资源。以下是Java中使用饿汉式实现单例模式的示例代码:
public class Singleton {
private static final Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}
单例模式的优缺点
优点:
- 确保只有一个实例:单例模式可以保证一个类只有一个实例,从而避免了由于多实例而导致的资源浪费和状态不一致问题。
- 提供全局访问点:单例模式提供了一个全局访问点,可以方便地访问和操作单例对象。
- 线程安全:单例模式的实现方式通常都是线程安全的,可以保证在多线程环境下也能正常工作。
缺点:
- 限制了类的可扩展性:单例模式限制了类的可扩展性,因为无法创建子类实例。
- 增加耦合度:单例模式增加了类的耦合度,因为所有需要使用该类的类都必须知道它的单例特性。
- 增加了测试难度:单例模式增加了类的测试难度,因为需要在多线程环境下进行测试以确保其线程安全性。