静态内部类实现单例
时间: 2023-07-27 21:07:07 浏览: 93
静态内部类实现单例是一种比较优秀的单例模式实现方式,它是基于类加载器的机制来保证线程安全的。具体实现方式如下:
```java
public class Singleton {
// 私有化构造函数
private Singleton() {}
// 静态内部类,用于实现单例模式
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
// 获取单例对象
public static Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
```
在上面的实现中,静态内部类 SingletonHolder 中持有了 Singleton 的实例对象 INSTANCE,只有在调用 getInstance() 方法时,才会对 SingletonHolder 进行初始化,从而创建 Singleton 的实例对象。由于静态内部类 SingletonHolder 是私有的,并且只会被加载一次,因此可以保证线程安全,同时也能够延迟加载,提高了单例对象的创建效率。
相关问题
静态内部类实现单例kotlin
静态内部类在 Kotlin 中是一种常见的实现单例模式的方式。这种方式的优点在于它保证了线程安全,因为静态成员变量是在类加载的时候初始化的,而内部类直到第一次实例化外部类时才会创建,这就避免了多线程下的同步问题。以下是使用静态内部类实现单例的一个简单示例:
```kotlin
// 定义静态内部类作为单例
object SingletonClass : Singleton() {
// 单例类中的公共属性或方法
val sharedValue = "I am a singleton"
// 如果有其他业务逻辑,可以在这里添加
}
// 定义接口或抽象类 Singleton
interface Singleton {
// 提供公共访问点,如获取单例实例
fun getInstance(): SingletonClass
}
fun main(args: Array<String>) {
val instance = SingletonClass.getInstance()
println(instance.sharedValue) // 输出:I am a singleton
}
```
如何使用静态内部类实现单例模式
使用静态内部类实现单例模式可以避免多线程并发访问的问题,同时实现简单方便。具体实现方法如下:
```java
public class Singleton {
// 私有化构造方法
private Singleton() {}
// 静态内部类,用于实例化单例对象
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
// 获取单例对象的方法
public static Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
```
在上面的代码中,静态内部类 SingletonHolder 被声明为私有的,只有 Singleton 类可以访问它。在 SingletonHolder 中实例化了一个 Singleton 对象,且该实例化操作只会在类加载时执行一次,保证了线程安全性。由于 SingletonHolder 是一个静态内部类,只有在调用 getInstance() 方法时才会进行类加载,因此实现了懒加载的效果。
调用获取单例对象的方法 Singleton.getInstance() 时,会返回 SingletonHolder 中实例化的 Singleton 对象,保证了单例对象的唯一性。
阅读全文