Dart Flutter命名构造函数和工厂函数之间有什么区别

发布于 1周前 作者 itying888 最后一次编辑是 5天前 来自 分享

Flutter仿小米APP实战教程: https://www.itying.com/goods-1176.html

在 Dart 语言中,命名构造函数(Named Constructors)和工厂函数(Factory Constructors)是两种用于创建对象的不同方式,它们有以下区别:

1、Dart Flutter命名构造函数:命名构造函数是在类中定义的特殊构造函数,通过使用类名后跟一个句点和构造函数名称来定义。命名构造函数用于提供不同的构造方式或创建具有特定初始化逻辑的对象。

class Person {
  String name;
  int age;
  // 默认构造函数
  Person(this.name, this.age);
  // 命名构造函数
  Person.fromBirthYear(this.name, int birthYear) {
    age = DateTime.now().year - birthYear;
  }
}

// 使用默认构造函数创建对象
var john = Person('John', 30);
// 使用命名构造函数创建对象
var alice = Person.fromBirthYear('Alice', 1995);

2、Dart Flutter工厂函数:工厂函数是通过使用 factory 关键字定义的特殊构造函数,用于创建对象的灵活方式。工厂函数可以返回一个新的对象,也可以返回一个已存在的对象。工厂函数通常用于创建单例对象或根据特定条件决定返回哪个对象。

class Logger {
  String name;
  static Logger _instance;
  // 私有构造函数
  Logger._internal(this.name);
  // 工厂函数
  factory Logger(String name) {
    if (_instance == null) {
      _instance = Logger._internal(name);
    }
    return _instance;
  }
}
// 使用工厂函数创建对象
var logger1 = Logger('Logger 1');
var logger2 = Logger('Logger 2');

在上述示例中,Logger 类定义了一个工厂函数 Logger,用于创建 Logger 对象。工厂函数通过判断是否已存在对象,来决定返回一个新的对象或一个已存在的对象。这种方式可以实现单例模式,确保只有一个 Logger 对象被创建。

命名构造函数用于提供不同的构造方式或初始化逻辑,而工厂函数用于提供创建对象的灵活方式,可以返回新的对象或已存在的对象。

Flutter仿小米APP实战教程: https://www.itying.com/goods-1176.html

回到顶部