MST

星途 面试题库

面试题:Java泛型在单例模式中的应用

请描述如何在Java单例模式中合理运用Java泛型,以实现更通用的单例创建方式,并写出简单的代码示例。同时说明这种运用泛型的单例模式相较于传统单例模式的优势在哪里。
37.0万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

如何在Java单例模式中合理运用Java泛型实现更通用的单例创建方式

  1. 代码示例
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());
    }
}
  1. 说明:上述代码通过在类定义和方法定义中使用泛型 <T>,使得 GenericSingleton 类可以根据传入的不同类型参数 T 创建不同类型数据的单例实例。getInstance 方法使用双重检查锁定机制来确保线程安全地创建单例。

运用泛型的单例模式相较于传统单例模式的优势

  1. 通用性更高:传统单例模式只能针对一种特定类型的数据创建单例。而运用泛型的单例模式可以根据不同的需求创建不同类型数据的单例,减少了重复代码的编写。例如,在一个应用程序中可能需要不同类型的配置单例,使用泛型单例模式只需一个类模板即可满足多种类型的需求。
  2. 代码复用性增强:泛型单例模式将单例创建的逻辑抽象出来,适用于多种数据类型,提高了代码的复用性。无需为每种类型单独编写一个单例类,使得代码结构更加简洁和紧凑。