命名构造方法
class Person{
String userName;
int age;
Person(this.userName,this.age);
//命名构造方法
Person.fromData(Map date){
this.userName = data['name'];
this.age = data['age'];
}
//使用命名构造方法创建对象
void main(){
var p = new Person.fromData({
"name":"baby";
"age":"12"
});
print(p.userName);
}
}
常量构造方法
class ConstPoint{
final num x;
final num y;
//使用const构造方法
const ConstPoint(this.x,this.y);
//编译时常量对象,需使用const来创建对象
static final ConstPoint origin = const ConstPoint(1,5);
}
void main(){
print(ConstPoint.origin.x);
print(ConstPoint.origin.y);
}
//1 5
工厂构造方法
class Logger{
final String name;
//创建一个静态Map做为缓存
static final Map<String,Logger> cache = <String,Logger>{};
//定义一个命名构造方法,用下划线 _ 修饰,将构造方法私有化
Logger._internal(this.name);
//使用关键字factory修饰类同名构造方法
factory Logger(String name){
if(_cache.containsKey(name)){
return _cache[name];
}else{
//调用命名构造方法创建新对象
final logger = new Logger._internal(name);
_cache[name] = logger;
//存入缓存
return logger;
}
}
}
void main(){
var uiLog = new Logger('UI');
var eventLog = new Logger('event');
var uiLog2 = new Logger('UI');
}