在Dart中,工厂构造函数需要更多的逻辑处理,但与const构造函数并没有太大区别,除了它们允许使用“非final”实例变量。
相比于const构造函数,它们有什么优点呢?
感谢大家。
编辑
以下内容是关于Seth Ladd的博客《Dart-尝试理解“工厂”构造函数的价值》中工厂构造函数用法的介绍。
class Symbol {
final String name;
static Map<String, Symbol> _cache = new Map<String, Symbol>();
factory Symbol(String name) {
if (_cache.containsKey(name)) {
return _cache[name];
} else {
final symbol = new Symbol._internal(name);
_cache[name] = symbol;
return symbol;
}
}
Symbol._internal(this.name);
}
main() {
var x = new Symbol('X');
var alsoX = new Symbol('X');
print(identical(x, alsoX)); // true
}
依我看,使用普通构造函数可以实现相同的效果,只是差别微妙,但更加简单。
class Symbol {
static final Map<String, Symbol> cache = {};
final String name;
Symbol(name) {
cache[name] = new Symbol._internal();
}
Symbol._internal();
}
main(){
var a = new Symbol('something');
var b = new Symbol('something');
print(identical(a, b)); // false!
print(Symbol.cache); //{something: Instance of 'Symbol'}
}
如上所示,虽然两个实例a和b是不同的对象,但效果都相同,如打印输出“print(Symbol.cache); //{something: Instance of 'Symbol'}”,因为映射对象只允许使用相同的字符串作为其键。
那么,我的问题是工厂构造函数(或工厂模式)与普通/常量构造函数相比有什么特殊优点?因为以上示例代码仅显示工厂构造函数没有任何优点。
有人能解释一下在Dart语言中所谓的“工厂模式”吗?而不是Java/C#。