📜  颤振单例 - Dart (1)

📅  最后修改于: 2023-12-03 15:12:54.321000             🧑  作者: Mango

颤振单例 - Dart

颤振单例是 Dart 语言中一种特殊的单例模式,其原理在于在获取单例实例时,实例并不是立即创建的。而是在第一次调用该实例中的方法时才进行创建。这种方式相比于普通的单例模式,可以延迟实例化过程,从而节省了资源。

使用方法

要使用颤振单例,我们需要先定义一个类,然后将其实例化为单例对象。如下所示:

class MySingleton {
  static MySingleton _instance;

  MySingleton._internal();

  factory MySingleton() {
    if (_instance == null) {
      _instance = MySingleton._internal();
    }
    return _instance;
  }

  void doSomething() {
    print("I'm doing something !");
  }
}

上面的实现方式已经非常常见。我们定义一个静态变量 _instance 用来保存单例对象,然后在构造函数中定义一个 private 的 _internal 方法。最后通过一个工厂方法来创建对象。

如果我们使用普通的单例模式,那么单例在获取后就被创建了,而且该过程是线程安全的。但在颤振单例中,真正的实例化是在其方法被首次调用时进行的。如下所示:

void main() {
  var singleton = MySingleton();
  singleton.doSomething();
}

在上述代码中,虽然我们定义了单例变量 singleton,但实际上实例化只在 doSomething() 方法被首次调用时完成。如果在该方法之前,我们再次使用 singleton 来进行操作,则实例并未被创建。

优势和不足

与普通单例模式相比,颤振单例具有一些显著的优点:

  • 节省资源:实例在首次使用时创建,无需预先实例化。
  • 灵活易用:可以像普通类一样使用。

颤振单例的不足也比较明显:

  • 不是线程安全的。
  • 如果在使用之前并未调用任何方法,则不会被实例化。
总结

在需要频繁实例化的场景下,颤振单例是一种非常实用的设计模式。它能够延迟实例化过程,避免不必要的资源消耗。除此之外,通过工厂方法的方式使用单例,可以让我们更加灵活方便地使用。

如果您想要尝试颤振单例,请务必注意其不足之处,并在使用过程中多加留意。