【问题标题】:How to design a singleton class that needs a parameter only on the first instantiation?如何设计一个仅在第一次实例化时才需要参数的单例类?
【发布时间】:2015-01-31 08:49:57
【问题描述】:

我有一个单例类ORMHelper,它只在第一次实例化时才需要一个参数(FileReader)。

ORMHelper.getInstance(FileReader fr);

完成后,单例会解析文件并执行其工作。后续实例化不需要FileReader,因为解析已经完成。

ORMHelper.getInstance();

getInstance() 中有一个检查以确定文件是否已经被解析,否则它会引发异常。

有没有更好的方法来做到这一点?

【问题讨论】:

    标签: oop design-patterns singleton


    【解决方案1】:

    当第一次调用getInstance(FileReader fr); 时,我将存储有关FileReader 参数的信息(例如:它引用的文件路径)。在随后对该方法的调用中,您可以检查参数(分别是其基础文件)是否等于第一次调用的参数。如果是,我不会抛出任何异常,而是简单地返回无参数 getInstance() 方法的值。如果参数不同,您应该抛出异常。

    此外,您应该添加一个isInitialized() 方法,该方法返回一个布尔值,指示实例是否已经初始化。如果您想知道实例是否已初始化,则使用检查会更干净

    if (ORMHelper.isInitialized()) {
      //...
    }
    

    而不是调用getInstance() 并检查是否抛出异常。

    【讨论】:

      猜你喜欢
      • 2014-02-08
      • 2019-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-31
      • 2021-06-29
      相关资源
      最近更新 更多