看不懂dart中的单例写法

34 阅读1分钟
class TokenManaer {
  String? _name;
  final String _key = '123'
  
  //创建单例(这里的_instance是为了保存实例的)
  static TokenManager? _instance;
  // 无参的自定义的构造函数(也可以叫无参的命名构造函数)
  // 为了确保外部不能直接创建实例(为啥呢?)
  TokenManager._internal();  // ToDo
  // dart中只能有一个未命名的构造函数,而命名构造函数可以有多个
  factory TokenManager() {
    _instance ??= TokenManager._insternal();
    return _instance!;
  }
}



//这一句是作为一个变量,用来存放实例的
static TokenManager? _instance

//这一句是自定义的构造函数,类似与construct
TokenManager._internal()


// 其实也可以理解为construct
factory TokenManager(){ // 这是一个未命名的构造函数}


//在案例中有两个construct的构造函数?
TokenManaget._internal() 
factory TokenMnanaget


其中 factory构造函数与普通构造函数最大的区别是什么?
factory构造函数有返回值普通构造函数没有返回值

疑问: 为啥要写两个构造函数呢?

在使用中可以用factory TokenManaget()用来进行判断,是否存在了实例

可以上面案例中 “ToDo”的TokenManager_internal()是否完全没有呀,因为执行这一句也给无法赋值给 _internal 属性呀