2014-09-12 5 views
1

아래는 세스 래드 (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#이 아닌 다트 언어로 설명 될 수 있습니까?

+0

동일한 질문을 두 번씩하지 마십시오. 다른 질문을 편집하여이 내용과 동일한 내용을 가지지 않은 경우 더 이해할 수 있지만 이제는 완전히 내재적입니다. –

답변

4

공장 패턴은 동일합니다. 이는 일반적인 패턴이며 언어별로 다릅니다.

Dart는 팩토리 생성자를 제공하여 팩토리 패턴을 지원합니다. 팩토리 생성자는 값 (객체)을 반환 할 수 있습니다. 첫 번째 예에서는 반환하는 키의 인스턴스가 있는지 확인합니다.

두 번째 예제에서는 맵의 키를 확인하지 않고 인스턴스를 반환하지 않습니다. 이것이 두 인스턴스가 동일하지 않은 이유입니다.

감사합니다. 로버트

+0

고맙습니다, 로버트. 귀하의 의견은 많은 도움이되었습니다. 특히 'RETURN'은 내가 아는 것 이상을 의미합니다. 어쨌든 공장 패턴에 대한 모든 자료는 Java 또는 C# 또는 Lisp의 관점에서 설명합니다. Java, C# 또는 Lisp을 이해하지 못하는 사용자를 위해 다트 또는 JS의 관점에서 설명 할 수 있습니까? – Letsgo

+0

다트를 더 많이 습득할수록, 다트의 몇 가지 핵심 ** 개념이 자바 전망에서 설명되는 것처럼 더 많은 자바가 필요하다는 것을 알 수 있습니다. – Letsgo

+0

공장 패턴은 일반적으로 모든 언어에 적용됩니다. 다트는 쉽게 만들 수있는 특수 언어 개념 (공장 생성자) 만 있습니다. 자바에서는 객체를 생성하는 싱글 톤 팩토리를 가지고있다. – Robert