Let*_*sgo 14 constructor factory dart
在Dart中,工厂构造函数需要来自编码器的更多逻辑,但与const类型不同,除非它们允许"非最终"实例变量.
它们对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
}
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#吗?
Gün*_*uer 21
工厂构造函数和const构造函数实现完全不同的目的.const构造函数允许在编译时常量表达式中具有自定义类的实例.有关const构造函数的更多详细信息,请参见/sf/answers/1522268471/.
工厂构造函数和返回类的新实例的常量方法更相似.不同之处在于,工厂构造函数与new
普通构造函数一样被调用,并且具有常量方法所没有的一些限制.
普通构造函数和工厂构造函数之间的主要区别在于,您可以影响实际创建新实例以及它的具体类型.
在https://www.dartlang.org/dart-tips/dart-tips-ep-11.html中,提到缓存是一个流行的例子.工厂构造函数可以检查它是否在内部缓存中具有准备好的可重用实例并返回此实例或以其他方式创建新实例.
另一个例子是单身模式.有关详细信息,请参阅/sf/answers/885470211/.
另一个例子是工厂模式.例如,您可以A
使用工厂构造函数来创建一个抽象类(无法实例化),该构造函数返回一个具体子类的实例,A
例如依赖于传递给工厂构造函数的参数.
这是一个类似的问题Dart - 试图理解'factory'构造函数的价值