Flutter:Dart单例模式

单例模式是一种23种设计模式中非常常见的一种。在内存中有且仅有一个该实例对象,可以避免频繁创建实例对象,节省内存。

代码

在Dart中,单例模式如下

class Singleton {
  static Singleton? _instance;

  Singleton._internal() {
    _instance = this;
  }

  static get instance => _instance ?? Singleton._internal();
}

void main() {
  Singleton test1 = Singleton.instance;
  Singleton test2 = Singleton.instance;
  print(test1.hashCode);
  print(test2.hashCode);
}


运行结果:
123442092
123442092

 

在Dart中,使用工厂构造函数,更优雅的单例模式如下

class Singleton {
  static Singleton? _instance;
  Singleton._internal() {
    _instance = this;
  }
  factory Singleton() => _instance ?? Singleton._internal();
}

void main() {
  Singleton test1 = Singleton();
  Singleton test2 = Singleton();
  print(test1.hashCode);
  print(test2.hashCode);
}

运行结果:
793614242
793614242

注意

以上两种写法均为饿汉模式。当使用懒汉模式,因为Dart是单线程,所以无需担心线程安全。

“?”:在Dart中,支持空安全,表示该变量可以为Null。

“!”:在Dart中,判断变量是否为Null,若为Null,则抛出异常,否则继续运行。

“_”:在Dart中,表示私有属性和私有方法。

“ClassName._xxx()”:私有的命名构造函数。

“get”:该修饰词所修饰的方法(不写括号)可以使外部获取实例的私有属性,调用时也不用写括号。

“??”:a??b,若a为Null,则返回b,否则返回a。

“??=”:a??=b,若a为Null,则把b赋值给a,并返回a。

“factory”:该关键词,DartVM不会再创建一个新的实例对象,而是在内存中返回已存在的实例对象。工厂构造函数不能访问this。普通构造不需要返回值,工厂构造函数需要返回值。

 

除非注明,否则均为呆小猴博客原创文章,转载必须以链接形式标明本文链接!付费资源为虚拟物品,一经出售,概不退款!
呆小猴 » Flutter:Dart单例模式

发表回复

呆小猴 · 专注安全学习与分享

关于作者 联系作者