Flutter构造函数与单例

2024-08-06  本文已影响0人  老P打码

构造函数类型

1. 默认构造函数
class MyClass {
  MyClass() {
    // 初始化代码
  }
}
2. 命名构造函数
class MyClass {
  MyClass.myNamedConstructor() {
    // 初始化代码
  }
}
// 调用
var myObject = MyClass.myNamedConstructor();
3. 工厂构造函数
class MyClass {
  factory MyClass() {
    return MyClass._internal();
  }

  MyClass._internal() {
    // 初始化代码
  }
}
4. 常量构造函数
class MyClass {
  final int value;
  const MyClass(this.value);
}

单例

1. 饿汉式单例
class Singleton {
  // 静态实例,立即初始化
  static final Singleton _instance = Singleton._internal();

  // 私有构造函数
  Singleton._internal();

  // 提供一个全局访问点
  factory Singleton() {
    return _instance;
  }
}
2. 懒汉式单例 (Lazy Initialization)
class Singleton {
  static Singleton? _instance;

  // 私有构造函数
  Singleton._internal();

  // 提供一个全局访问点
  factory Singleton() {
    _instance ??= Singleton._internal();
    return _instance!;
  }
}
3. 使用 Dart 的静态变量
class Singleton {
  // 静态实例,立即初始化
  static final Singleton instance = Singleton._internal();

  // 私有构造函数
  Singleton._internal();
}
4. 使用 get 方法懒加载
class Singleton {
  static Singleton? _instance;

  Singleton._internal();

  static Singleton get instance {
    _instance ??= Singleton._internal();
    return _instance!;
  }
}
5. 使用 Dart 的 late 关键字(推荐)
class Singleton {
  static late final Singleton _instance = Singleton._internal();

  Singleton._internal();

  static Singleton get instance => _instance;
}

单例实现方案 比较总结

饿汉式单例 适用于应用启动时就需要实例,并且实例创建开销不大的场景。
懒汉式单例 适用于实例创建开销较大,且可能并不总是需要实例的场景,但需要注意线程安全。
静态变量单例 适用于实例创建开销不大,且需要简单实现的场景。
get 方法懒加载 适用于需要延迟加载且愿意在实现中做一些妥协的场景。
late 关键字 是现代 Dart 中推荐的方式,结合了延迟加载和线程安全的优势。

上一篇 下一篇

猜你喜欢

热点阅读