单例

  1. class Singleton{
  2. // static _instance,_instance会在编译期被初始化,保证了只被创建一次
  3. static final Singleton _instance = Singleton._internal();
  4. //提供了一个工厂方法来获取该类的实例
  5. factory Singleton(){
  6. return _instance;
  7. }
  8. // 通过私有方法_internal()隐藏了构造方法,防止被误创建
  9. Singleton._internal(){
  10. // 初始化
  11. init();
  12. }
  13. // Singleton._internal(); // 不需要初始化
  14. void init(){
  15. print("这里初始化");
  16. }
  17. }

另一种单例写法

  1. // 另一种写法:
  2. class Singleton{
  3. factory Singleton() => _getInstance();
  4. static Singleton get instance => _getInstance();
  5. static Singleton _instance;
  6. Singleton._internal();
  7. static Singleton _getInstance(){
  8. if(_instance == null){
  9. _instance = Singleton._internal();
  10. }
  11. return _instance;
  12. }
  13. }