다트에서 팩토리 생성자는 코더에서 더 많은 로직을 필요로하지만 '비 최종'인스턴스 변수를 허용한다는 점을 제외하고는 const와 크게 다르지 않습니다.다트 팩토리 생성자 - "const"생성자와 다른 점
const 생성자에 비해 장점은 무엇입니까?
감사합니다.
아래
가 세스 래드의 블로그에서 공장 생성자에 대한 사용입니다 편집 - 공장 '생성자' '다트의 가치를 이해하려고 노력'.
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#이 아닌 다트 언어로 설명 될 수 있습니까?
입니다. –