Flutter Dart Factory 使用实例

13 min read
class  Logger {
    final String name;

    // 创建一个静态Map做为缓存
    static final Map<String, Logger> _cache =  <String, Logger>{};

    // 定义一个命名构造方法,用下划线"_"修饰,将构造方法私有化
    Logger._internal(this.name);

    // 使用关键字factory修饰类同名构造方法
    factory Logger(String name) {
        if (_cache.containsKey(name)) {
            return _cache[name];
        } else {
            // 调用命名构造方法创建新对象
            final logger= new  Logger._internal(name);
            _cache[name] = logger; // 存入缓存
            return logger;
        }
    }
}


void  main() {
    var uiLog = new Logger('UI');
    var eventLog = new Logger('event');
    var uiLog2 = new Logger('UI');
}
  • 工厂构造函数不需要每次构建新的实例,且不会自动生成实例,而是通过代码来决定返回的实例对象
  • 工厂构造函数类似于 static 静态成员,无法访问 this 指针
  • 一般需要依赖其他类型构造函数
  • 工厂构造函数还可以实现单例