下面是Seth博客“试着理解“工厂”构造函数的价值”中工厂构造函数的用法。
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
}
IMHO,对于一般的构造函数来说,同样的效果可以通过细微的差别来实现,但是非常简单。
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);//{某事:映射对象的“符号”}的实例只允许与其键相同的字符串中的一个相同。
那么,我的问题是,与一般/const构造函数相比,工厂构造函数(或工厂模式)有什么独特的优点?因为上面的示例代码本身并不显示工厂构造函数的优点。
有人能解释什么是所谓的‘工厂模式’在Dart语言,而不是Java/C#?
发布于 2014-09-11 17:44:09
工厂的模式是一样的。这是一个通用的模式,并不是特定于语言的。
Dart提供工厂构造函数来支持工厂模式。工厂构造函数能够返回值(对象)。在第一个示例中,您将检查是否存在返回它的键的实例。
在第二个例子中,您不检查映射的键,也不返回实例。这就是为什么这两个实例不完全相同的原因。
你好,罗伯特
https://stackoverflow.com/questions/25798864
复制相似问题