Let*_*sgo 9 constructor factory-pattern dart
下面是关于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
}
Run Code Online (Sandbox Code Playgroud)
恕我直言,与一般的构造函数,可以实现相同的效果与微妙的差异,但相当简单.
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'}
}
Run Code Online (Sandbox Code Playgroud)
如上所示,虽然两个实例a和b是不同的对象,但效果与'print(Symbol.cache); // {something:'Symbol'的实例}作为一个地图对象只允许其中一个相同的字符串作为其键.
所以,我的问题是工厂构造函数(或工厂模式)对一般/ const构造函数的特殊优点是什么?因为上面的示例代码没有显示工厂构造函数的优点.
任何人都可以解释Dart语言中所谓的"工厂模式"而不是Java/C#吗?
Rob*_*ert 11
工厂PATTERN是一样的.这是一般模式,不是语言特定的.
Dart提供工厂构造函数来支持工厂模式.工厂构造函数能够返回值(对象).在第一个示例中,检查是否存在您返回密钥的实例.
在第二个示例中,您不检查地图的键,也不返回实例.这就是为什么这两个实例不相同的原因.
问候,罗伯特
| 归档时间: |
|
| 查看次数: |
17303 次 |
| 最近记录: |