单例如何在Dart中工作?

问题描述 投票:0回答:1

我是Dart和Flutter的新手。在阅读教程时,我知道可以使用factory关键字使单例。但是之后,我得到了这段代码。

class AccountService {
  static final _instance = AccountService._internal();

  AccountService._internal();

  static AccountService getInstance() {
    return _instance;
  }
}

我的问题。

  1. 代码如何工作?
  2. getInstance()被叫到时?
  3. AccountService._internal()是构造函数吗?
  4. static final _instance = AccountService._internal();-什么时候被叫?

请帮助我

dart singleton
1个回答
1
投票

Dart中的静态字段都是惰性计算的,因此,第一次访问该字段时,它们将首先获得其值。

所以:

  1. 当您调用getInstance()时,它将返回字段_instance的值。如果这是第一次,则将评估该字段,因此将调用AccountService._internal()。如果是第二次,则将重用先前访问的值。

  2. 您是第一次在代码中的某个地方调用该方法吗?如果您从不调用该方法,则将永远不会创建_instance引用的对象。

  3. 是的,它是一个命名的构造函数,并且由于名称以“ _”开头,因此只能从该类所属的库中使用。这样,可以限制此类中的新对象,以便仅允许该类本身创建实例。

  4. 这是首次访问_instance。由于该名称也以“ _”开头,因此只能从该类所属的库中使用。

Dart规范中使用以下理由描述了静态字段的惰性初始化:

带有初始化表达式的静态变量声明被初始化(8.1)。

之所以提供惰性语义,是因为我们不希望使用一种语言来定义昂贵的初始化计算,从而导致应用程序启动时间较长。这对于必须支持客户端应用程序编码的Dart尤其重要。

https://dart.dev/guides/language/specifications/DartLangSpec-v2.2.pdf

© www.soinside.com 2019 - 2024. All rights reserved.