Android 单例模式中静态内部类方式的优缺点
时间: 2023-06-04 22:05:18 浏览: 89
静态内部类单例模式的优点是:
1. 延迟加载:当第一次调用 getInstance() 方法时才会加载静态内部类,避免了 eager-loading 带来的资源浪费问题。
2. 线程安全:静态内部类的加载过程是线程安全的,可以通过同步锁的方式控制多线程中的竞争。
3. 避免反序列化破坏单例:静态内部类不会被类加载器自动初始化,只有在第一次调用 getInstance() 方法时才会被加载,避免了通过反序列化破坏单例的问题。
静态内部类单例模式的缺点是:
1. 如果要实现延迟加载,但是在单例实例创建前需要执行一些其他初始化操作,会比较麻烦。
2. 如果需要支持序列化,需要手动添加 readResolve() 方法,否则会创建新的实例。
相关问题
单例模式 静态内部类
Java中的单例模式是一种设计模式它确保一个类只有一个实例,并提供一个全局访问点访问该实例。静态内部类是一种常用的实现单例模式的方式。
在使用静态内部类实现单例模式时,我们将单例类的构造方法私有化,以防止外部直接创建实例。然后,我们在单例类中定义一个静态内部类,该内部类持有一个单例实例,并在静态代码块中初始化该实例。通过静态内部类的方式,我们可以保证在需要使用单例实例时才会创建它,而且只会创建一次。
以下是使用静态内部类实现单例模式的示例代码:
```java
public class Singleton {
private Singleton() {
// 私有化构造方法
}
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
```
在上面的代码中,Singleton类的构造方法被私有化,确保外部无法直接创建实例。SingletonHolder是一个静态内部类,它持有一个Singleton实例,并在静态代码块中初始化该实例。getInstance()方法返回SingletonHolder中的实例,保证了单例的唯一性。
使用静态内部类实现单例模式的优点是延迟加载和线程安全。由于静态内部类的特性,只有在第一次调用getInstance()方法时才会加载SingletonHolder类,从而创建单例实例。同时,由于类加载是线程安全的,所以静态内部类实现的单例模式也是线程安全的。
请使用代码实现 Android 中的静态内部类单例模式
好的,以下是使用静态内部类实现的Android中的单例模式代码:
```
public class Singleton {
private Singleton() {}
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
```
这样就可以通过调用`Singleton.getInstance()`来获取唯一的实例对象。