廖老师举的单例写法是这样的:
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(); 是不是就不能直接这么写了?因为构造参数只有在获取实例的时候才会传入。
private static final Singleton INSTANCE = new Singleton();
举一个场景可能不太恰当的例子:比如有一个配置文件加载器,想把它做成单例的。在获取这个加载器单例的时候,需要指定从哪个源拉取配置,比如是本地 json 文件还是 Redis 数据库。这种情况下,传参数的操作该放在哪一步合适呢?
之前是用双重检查懒加载来做的,确实感觉不太优雅。想改成廖老师这样的实现方式,但没想到合适的方法。
给属性添加set方法啊,单例只是针对类,既然需要有参的构造,那么必然可以有达到有参构造效果一样方法的属性设置(传递参数进来是为了实现功能)
另外,回归一开始廖老师所说的,不要为了使用设计模式而使用设计模式
Sign in to make a reply
赫赫XX123
廖老师举的单例写法是这样的:
但如果构造单例的时候需要传入参数呢?那么
private static final Singleton INSTANCE = new Singleton();
是不是就不能直接这么写了?因为构造参数只有在获取实例的时候才会传入。举一个场景可能不太恰当的例子:比如有一个配置文件加载器,想把它做成单例的。在获取这个加载器单例的时候,需要指定从哪个源拉取配置,比如是本地 json 文件还是 Redis 数据库。这种情况下,传参数的操作该放在哪一步合适呢?
之前是用双重检查懒加载来做的,确实感觉不太优雅。想改成廖老师这样的实现方式,但没想到合适的方法。