아래는 세스 래드 (Seth Ladd)의 블로그 'Dart - Trying to understand the value of 'factory' constructor'의 팩토리 생성자 사용법에 대한 것입니다.다트의 팩토리 생성자에 대하여
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, 일반 생성자와 같은 효과는 미묘한 차이를 달성하지만, 매우 간단 할 수있다. 인쇄 (Symbol.cache) '에 도시 한 바와 같이 두 개의 인스턴스하는 & B는 서로 다른 객체 앞에서 설명한 것처럼
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'}
}
, 효과는 모두 동일하다; // {something : 'Symbol'}의 인스턴스는지도 객체로 키와 동일한 문자열 중 하나만 허용합니다.
그래서 내 질문은 일반/const 생성자를 통해 공장 생성자 (또는 팩토리 패턴)의 독특한 장점이 무엇입니까? 위의 샘플 코드만으로는 팩토리 생성자의 장점이 나타나지 않으므로
누구나 'Factory Pattern'이 Java/C#이 아닌 다트 언어로 설명 될 수 있습니까?
동일한 질문을 두 번씩하지 마십시오. 다른 질문을 편집하여이 내용과 동일한 내용을 가지지 않은 경우 더 이해할 수 있지만 이제는 완전히 내재적입니다. –