main(List<String> args) {
Person._nameCache;
Person._colorCache;
// final保证对象不会随便的创建和被赋值
final p1 = Person.withName("ksj");
final p2 = Person.withName("ksj");
print(identical(p1, p2));
// 返回结构一致true
// 通过缓存来判断对象是否创建过,来保证对象的一致性——最大特点手动返回一个对象
// 缺点:多占内存,但是降低了多次创建对象和销毁
}
// class Person {
// final String name;
// const Person(this.name);
// 工厂构造函数需要自己手动的去返回一个对象
// 常用构造函数不用自己手动的返回一个对象
// }
class Person {
String name;
String color;
// 类属性、记录的是name的缓存
static final Map<String, Person> _nameCache = {};
// 记录缓存,手动返回属性
static final Map<String, Person> _colorCache = {};
// 默认有构造函数、但是你手动生成的时候,默认就不生成构造函数了,需要手动生成
Person(this.name, this.color);
factory Person.withName(String name) {
if (_nameCache.containsKey(name)) {
return _nameCache[name];
} else {
final p = Person(name, "default");
_nameCache[name] = p;
return p;
}
}
}
网友评论