面试题答案
一键面试如何在Java单例模式中合理运用Java泛型实现更通用的单例创建方式
- 代码示例:
public class GenericSingleton<T> {
private static volatile GenericSingleton instance;
private T data;
private GenericSingleton(T data) {
this.data = data;
}
public static <T> GenericSingleton<T> getInstance(T data) {
if (instance == null) {
synchronized (GenericSingleton.class) {
if (instance == null) {
instance = new GenericSingleton<>(data);
}
}
}
return instance;
}
public T getData() {
return data;
}
}
使用示例:
public class Main {
public static void main(String[] args) {
GenericSingleton<String> singleton1 = GenericSingleton.getInstance("Hello");
GenericSingleton<String> singleton2 = GenericSingleton.getInstance("World");
System.out.println(singleton1.getData());
System.out.println(singleton2.getData());
}
}
- 说明:上述代码通过在类定义和方法定义中使用泛型
<T>
,使得GenericSingleton
类可以根据传入的不同类型参数T
创建不同类型数据的单例实例。getInstance
方法使用双重检查锁定机制来确保线程安全地创建单例。
运用泛型的单例模式相较于传统单例模式的优势
- 通用性更高:传统单例模式只能针对一种特定类型的数据创建单例。而运用泛型的单例模式可以根据不同的需求创建不同类型数据的单例,减少了重复代码的编写。例如,在一个应用程序中可能需要不同类型的配置单例,使用泛型单例模式只需一个类模板即可满足多种类型的需求。
- 代码复用性增强:泛型单例模式将单例创建的逻辑抽象出来,适用于多种数据类型,提高了代码的复用性。无需为每种类型单独编写一个单例类,使得代码结构更加简洁和紧凑。