Discuss / Java / 如果获取单例的时候需要传入参数,该如何写呢?

如果获取单例的时候需要传入参数,该如何写呢?

Topic source

赫赫XX123

#1 Created at ... [Delete] [Delete and Lock User]

廖老师举的单例写法是这样的:

public class Singleton {
    // 静态字段引用唯一实例:
    private static final Singleton INSTANCE = new Singleton();

    // 通过静态方法返回实例:
    public static Singleton getInstance() {
        return INSTANCE;
    }

    // private构造方法保证外部无法实例化:
    private Singleton() {
    }
}

但如果构造单例的时候需要传入参数呢?那么 private static final Singleton INSTANCE = new Singleton(); 是不是就不能直接这么写了?因为构造参数只有在获取实例的时候才会传入。

举一个场景可能不太恰当的例子:比如有一个配置文件加载器,想把它做成单例的。在获取这个加载器单例的时候,需要指定从哪个源拉取配置,比如是本地 json 文件还是 Redis 数据库。这种情况下,传参数的操作该放在哪一步合适呢?

之前是用双重检查懒加载来做的,确实感觉不太优雅。想改成廖老师这样的实现方式,但没想到合适的方法。

榆木出走

#2 Created at ... [Delete] [Delete and Lock User]

给属性添加set方法啊,单例只是针对类,既然需要有参的构造,那么必然可以有达到有参构造效果一样方法的属性设置(传递参数进来是为了实现功能)

另外,回归一开始廖老师所说的,不要为了使用设计模式而使用设计模式


  • 1

Reply