Dart 工厂建设者的意义是什么?

Dart 工厂建设者的意义是什么?,dart,Dart,这是我使用的一段外部代码 class Entry { const Entry({this.entry, @required this.entryId}); final String entryId; final String entry; factory Entry.fromJson(Map<String, dynamic> json) { return Entry(entry: json['entry'], entryId: json['entryId'

这是我使用的一段外部代码

class Entry {
  const Entry({this.entry, @required this.entryId});

  final String entryId;
  final String entry;

  factory Entry.fromJson(Map<String, dynamic> json) {
    return Entry(entry: json['entry'], entryId: json['entryId']);
  }

  Map<String, dynamic> toMap() {
    return {'entry': entry, 'entryId': entryId};
  }
}
类条目{
常量条目({this.Entry,@required this.entryId});
最后一个字符串entryId;
最后的字符串条目;
factory Entry.fromJson(映射json){
返回条目(条目:json['Entry'],entryId:json['entryId']);
}
映射toMap(){
返回{'entry':条目,'entryId':entryId};
}
}
工厂的用途是什么?
这不是一个单例模式用法,那么它是什么呢?
命名构造函数
Entry.fromJson
只是从json值创建一个
Entry
实例,那么
工厂
关键字的含义是什么?

来自dart手册

工厂建设者


在实现构造函数时使用factory关键字,该构造函数并不总是创建其类的新实例。例如,工厂构造函数可能从缓存返回实例,也可能返回子类型的实例。工厂构造器的另一个用例是使用初始化器列表中无法处理的逻辑初始化最终变量。

当您查看手册时,它说

在实现构造函数时使用factory关键字,该构造函数并不总是创建其类的新实例。例如,工厂构造函数可能从缓存返回实例,也可能返回子类型的实例工厂构造函数的另一个用例是使用初始化器列表中无法处理的逻辑初始化最终变量。

这正是你正在做的。您希望有两个
final
字段(entryId和entry),需要在声明、构造函数参数或初始值设定项列表中进行初始化。但是您希望对参数应用一些逻辑以获取其内容,这仅在主体中是可能的。所以你需要一个工厂构造器,一个普通的构造器无法做到这一点