Dart 工厂构造函数

factory 工厂构造函数

factory 关键字标识类的构造函数为工厂构造函数,它的作用是,使构造函数不返回新的实例,而是由代码实现控制是否返回新的实例,或使用缓存中的实例,或返回一个子类型的实例等等。

1. 普通的构造函数,在实例化时都会自动生成并返回一个新的对象;但工厂构造函数函数需要通过代码控制返回实例对象。
2. 工厂构造函数不需要每次构建新的实例,且不会自动生成实例,而是通过代码来决定返回的实例对象。
3. 工厂构造函数类似于 static 静态成员,无法访问 this 指针;一般需要依赖其他类型构造函数;
4. 工厂构造函数还可以实现单例;

示例

class Person {
  late String name;
  late int age;
  static Person? _instance;
  factory Person([String? name, int? age]) {
    if (Person._instance == null) {
      Person._instance = Person(name, age);
    }
    return Person._instance!;
  }
  Person.New(this.name, this.age);
  void Say() {
    print("My name is ${this.name} and I am ${this.age} years old.");
  }
}

void main(List<String> args) {
  Person person = Person.New("John..", 25);
  person.Say();
}