为什么在这种情况下使用工厂构造函数

Bri*_*den 2 dart flutter

我在本文中发现了一个有用的解析复杂 JSON 工具。该工具将采用 JSON 示例并用您选择的编程语言对其进行解析。

我目前正在使用 Dart 和我的简单原始 JSON“内容”示例:

{
  "title": "Welcome to quicktype!"
}
Run Code Online (Sandbox Code Playgroud)

由Dart 中的 JSON 工具解析后会创建以下 Dart 类:

import 'dart:convert';

Content contentFromJson(String str) => Content.fromJson(json.decode(str));

String contentToJson(Content data) => json.encode(data.toJson());

class Content {
    String title;

    Content({
        this.title,
    });

    factory Content.fromJson(Map<String, dynamic> json) => new Content(
        title: json["title"],
    );

    Map<String, dynamic> toJson() => {
        "title": title,
    };
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,工厂构造函数的目的是什么?没有存储 Content 类实例化的“私有”变量。没有检查缓存或键,以便在使用相同原始 JSON 数据参数的后续 Content.fromJson 调用中返回已实例化的 Content 类。

因为使用了factory关键字,这是否意味着Dart仅仅因为该方法被表示为工厂构造函数就在幕后处理重用相同的实例化?

jam*_*lin 5

我认为没有必要factory在该示例中使用。它可能是一个普通的命名构造函数:

Content.fromJson(Map<String, dynamic> json) : this(title: json["title"]);
Run Code Online (Sandbox Code Playgroud)

也就是说,即使没有必要,将构造函数声明为factory构造函数也可能会导致有一天它可能返回现有实例而不是保证新实例。

当然,在这种情况下,factory构造函数也是不必要的,因为它也可以是一个static方法(可以提供其他好处)。