Skip to content
章节导航

Dart的命名构造方法与命名工厂构造方法

命名构造方法

命名构造方法:[类名+.+方法名]

使用命名构造方法为类实现多个构造方法

shell
Student.cover(Student stu, this._school) : super(stu.name, stu.age) {
  print('命名构造方法');
}

使用方法

shell
Student student1 = Student.cover(student, '211');
 print('student1:${student1.toString()}');

命名工厂构造方法

命名工厂构造方法:factory [类名+.+方法名]

shell
//它可以有返回值,而且不需要将类的final变量作为参数,是提供一种灵活获取类对象的方式。
  factory Student.stu(Student stu) {
    return Student(stu._school, stu.name, stu.age,
        city: stu.city, country: stu.country);
  }

使用方法

shell
Student student2 = Student.stu(student);
  print('student2:${student2.toString()}');

工厂构造方法

工厂构造方法:不仅仅是构造方法,更是一种模式,有时候为了返回一个之前已经创建的缓存对象,原始的构造方法已经不能满足要求,那么可以使用工厂模式来定义构造方法

shell
class Logger {
  static Logger? _cache;

///工厂构造方法
  factory Logger() {
    _cache ??= Logger._internal();
    return _cache!;
  }

  Logger._internal();

  void log(String msg) {
    print(msg);
  }
}

使用方法

shell
Logger logger1 = Logger();
  Logger logger2 = Logger();
  print('logger1 == logger2 :${logger1 == logger2}');