关于Dart的工厂建设者

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提供工厂构造函数来支持工厂模式.工厂构造函数能够返回值(对象).在第一个示例中,检查是否存在您返回密钥的实例.

在第二个示例中,您不检查地图的键,也不返回实例.这就是为什么这两个实例不相同的原因.

问候,罗伯特