构造方法
分类:
1. 普通构造方法
2. 命名构造方法 (*解决dart构造器不能重载问题* )
3. 常量构造方法
4. 工厂构造方法
特点:
1. 如果无构造方法 则使用默认构造方法
2. 如果定义了构造方法 则默认构造方法无效
3. 构造方法不能重载
普通构造方法实现
dart构造方法 语法糖形式 可以对final类型的变量进行赋值
void main(){
var person = Person("zhangsan", 30, "男");
print("打印张三的信息 == ${person.name}/${person.age}/${person.gender}");
var lisi = Person("lisi", 29, "女");
print("打印李四的信息 == ${lisi.name}/${lisi.age}/${lisi.gender}");
}
class Person{
String name;
int age;
final String gender;
Person(this.name,this.age,this.gender);
}
结果:
打印张三的信息 == zhangsan/30/男
打印李四的信息 == lisi/29/女
命名构造方法
void main(){
var wangwu = Person.withName("王五", "男");
print("打印王五的信息 == ${wangwu.name}/${wangwu.age}/${wangwu.gender}");
}
class Person{
String name;
int age;
final String gender;
Person(this.name,this.age,this.gender);
Person.withName(String name, this.gender){
this.name = name;
}
}
结果:
打印王五的信息 == 王五/null/男
常量构造方法
void main(){
const person = Person("zhangsan", 30, "男");
print("打印张三的信息 == ${person.name}/${person.age}/${person.gender}");
}
class Person{
final String name;
final int age;
final String gender;
const Person(this.name,this.age,this.gender);
}
工厂构造方法
特点:工厂构造方法 可以返回一个类的实例
void main(){
Person.get("李四");
Person.get("王五");
Person.get("赵柳");
Person.get("李四");
Person.get("李四");
Person._cache.forEach((key, value) {
print("循环map中的key = $key 值 = $value");
});
}
class Person{
String name;
int age;
String gender;
static Map<String,Person> _cache = <String,Person>{};
Person.withName(String name){
this.name = name;
}
//工厂模式下创建实例
factory Person.get(String key){
var p1;
if(_cache.containsKey(key)){
p1 = _cache[key];
}else{
p1 = Person.withName(key);
_cache[key] = p1;
}
return p1;
}
}
结果:
lib/Rectangle.dart: Warning: Interpreting this as package URI, 'package:myflutterdemo/Rectangle.dart'.
循环map中的key = 李四 值 = Instance of 'Person'
循环map中的key = 王五 值 = Instance of 'Person'
循环map中的key = 赵柳 值 = Instance of 'Person'
Process finished with exit code 0