我正在研究Dart中的单例,我想看看这种编写方式是否遵循单例模式

btqmn9zl  于 2023-07-31  发布在  其他
关注(0)|答案(2)|浏览(71)
class Logger {
  factory Logger(String name) => Logger._internal(name);

  Logger._internal(this.name);
  final String name;
}

字符串
这种书写方式是否成立为所谓的单例模式?

c9qzyr3d

c9qzyr3d1#

你不应该把单例变量作为最终的原因,你的目标是使单例变量在不同的类之间共享相同的值,并且可以从任何地方修改。
如果你的单例变量没有被改变,而不是为什么他们在单例中,他们应该在常量中。
应该是这样的:

class LoggerSingleton {
  static final LoggerSingleton _singleton = LoggerSingleton._internal();

  factory LoggerSingleton() => _singleton;

  LoggerSingleton._internal();

  String? name;
  // String name = 'Initial value';
}

字符串
并将像这样使用,与创建示例或直接与名称:

void main() {
  LoggerSingleton().name = 'Initial value';

  LoggerSingleton logger = LoggerSingleton();

  logger.name;

  LoggerSingleton().name;
}


这里如果你不想在使用前第一次给予值,可以在单例本身的声明中给出它,这样它就不需要是可空的。

kkbh8khc

kkbh8khc2#

我使用Riverpod Provider对象作为惰性单例,因为它们是惰性的,并且它们也可以被覆盖以进行测试。这是传统单例模式很难做到的。

相关问题