面向对象编程:Flutter入门与Dart学习指南

发表时间: 2021-08-18 23:45

构造函数

Dart构造函数包括两种形式:生成构造(generative constructors)以及工厂构造(factory constructors)。

  1. 生成构造总是返回新的实例化对象,因此不需要返回值,形式如下:
class Person {	String name;  int age;    Person(this.name, this.age);}// 返回一个Person实例化构造Person p = Person('xiaoH', 18);

构造函数不支持重载,因此对于多种参数形式的构造需求,通过命名生成式构造(named generatived constructor)实现,形式如下:

class Person{	String name;  int age;    Person(this.name, this.age);  Person.onlyName(this.name);}// 如下两种构造形势Person xiaoM = Person.onlyName('xiaoM');Person xiaoH = person('xiaoH', 18);

2.工厂式构造函数相对而言约束较少,可以返回一个当前类及其子类的新实例(通过调用生成式构造方法),也可以通过一定条件返回已经创建的当前类及其子类的实例。工厂构造必须有return keyword。

class Person {	String name;  String country;    // named generative  Person.chinese(String name): this(name, 'China');	// named factory	factory Person.chinese(String name) {  	return ChinesePerson(name);  }}class ChinesePerson extends Person {	ChinesePerson(String name): super(name, 'China'); }

总结

单例模式

var log = Logger("demo1");log.log('test print');

在这个示例中工厂构造首先查询 _cache 映射中是否已经构造相同名称的实例,如果存在则直接返回,不存在调用Logger._internal(name)构造新的实例并添加到Map中。因为_cache是静态变量,因此它存储的是class level数据,所有对象都共享该Map。