【问题标题】:What is the sence of factory constructor?工厂构造函数的意义是什么?
【发布时间】:2021-05-04 11:21:50
【问题描述】:

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

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};
  }
}

factory 的目的是什么? 这不是单例模式的用法,那是什么? 命名构造函数Entry.fromJson只是从json值中创建了一个Entry的实例,那么factory这个关键字是什么意思呢?

【问题讨论】:

标签: dart


【解决方案1】:

当您查看手册时,它会说

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

这正是你正在做的。您希望有两个需要在声明中、构造函数参数或初始化列表中初始化的final 字段(entryId 和entry)。但是您想对参数应用一些逻辑以获取它们的内容,而这只能在正文中进行。所以你需要一个工厂构造函数,普通的构造函数是做不到的。

【讨论】:

    【解决方案2】:

    来自飞镖手册

    工厂构造函数

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-18
      • 2011-04-30
      • 1970-01-01
      • 2014-07-28
      • 1970-01-01
      相关资源
      最近更新 更多