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