Oop 如何设计仅在第一次实例化时需要参数的单例类?

Oop 如何设计仅在第一次实例化时需要参数的单例类?,oop,design-patterns,singleton,Oop,Design Patterns,Singleton,我有一个单例类,ORMHelper,它只在第一次实例化时需要一个参数(FileReader) ORMHelper.getInstance(FileReader fr); 完成此操作后,singleton将解析文件并执行其内容。后续的实例化不需要文件读取器,因为解析已经完成 ORMHelper.getInstance(); 在getInstance()中有一个检查,以确定文件是否已被解析,否则会引发异常 有更好的方法吗?当getInstance(FileReader fr)时,我将存储有关Fi

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

ORMHelper.getInstance(FileReader fr);
完成此操作后,singleton将解析文件并执行其内容。后续的实例化不需要
文件读取器
,因为解析已经完成

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

有更好的方法吗?

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

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

if (ORMHelper.isInitialized()) {
  //...
}
而不是调用
getInstance()
并检查是否引发异常