zoukankan      html  css  js  c++  java
  • Dart-单例模式

    dart有一个factory关键字,factory修饰的默认构造函数要返回类型实例,如:

    factory MyClass => getInstance();

    其它构造函数不能返回实例。

    注意,dart中类的默认构造函数只能有一个!factory修饰的默认构造函数也算默认构造函数!所以实际的构造要么不写(系统默认构造),要不就用命名构造函数。

    单例模式懒汉式常规写法:首先声明一个static变量instance,然后定义相应的getInstance方法。

    接下来是将其它构造函数都重定向到getInstance方法去,这样不论是通过什么方法构造的实例都是同一个单例实例。

    class Singleton {
      int x;
      int y;
    
      Singleton._internal(this.x, this.y);
    
      static Singleton instance = null;
    
      static getInstance() {
        if (instance == null) {
          instance = Singleton._internal(1, 1);
        }
        return instance;
      }
    
      factory Singleton() => getInstance();
    }

    饿汉式写法:

    class Singleton {
      int x;
      int y;
    
      Singleton._internal(this.x, this.y);
      
      static Singleton instance = Singleton._internal(1, 1);
    
      static getInstance() {
        return instance;
      }
    
      factory Singleton() => getInstance();
    }

    所谓饿汉就是在类初始化的时候直接将instance赋值,一直停留在内存中。如果不使用就会造成资源浪费。

    懒汉在有需要的时候才会生成实例,这样能够避免资源浪费。但这样就把延时从启动移到了运行时,用户体验会有所降低。

    一般,对于加载后马上就要使用或者比较简单的单例可以使用饿汉;如果不是所有调用该类都会使用该单例对象/构建比较耗时的单例推荐使用懒汉。

    另外由于Dart是单线程语言,所以不需要考虑多线程的情况。如果是Java,那么有可能多个线程同时调用getInstance,造成new出多个对象的情况,这种情况还需要额外进行线程加锁处理。

  • 相关阅读:
    permission 文档 翻译 运行时权限
    TabLayout ViewPager Fragment 简介 案例 MD
    Log 日志工具类 保存到文件 MD
    OkHttp 官方wiki 翻译 MD
    Okhttp 简介 示例 MD
    OkHttp 官方Wiki之【使用案例】
    DialogPlus
    倒计时 总结 Timer Handler CountDownTimer RxJava MD
    RecyclerView 判断滑到底部 顶部 预加载 更多 分页 MD
    CSS3的媒体查询(Media Queries)与移动设备显示尺寸大全
  • 原文地址:https://www.cnblogs.com/FdWzy/p/13811016.html
Copyright © 2011-2022 走看看