2010-06-29 5 views
3

구체적인 팩토리가 추상 팩토리 패턴을 사용하여 특정 유형의 매개 변수를 사용하여 구체적인 클래스를 만들 수 있습니까? 아니면 각각의 구체적인 공장에서 만든 여러 가지 구체적인 클래스가 동일한 필드가 있어야합니까?추상 팩토리에서 만든 클래스에 특정 속성을 설정하는 방법은 무엇입니까?

예) 아래 그림에서 클라이언트 (응용 프로그램)가 제공하는 다양한 인수 집합을 사용하여 WinButton 및 OSXButton을 인스턴스화하는 방법을 설명하겠습니까? 이러한 문제를 해결하기위한 접근 방법의

enter image description here

답변

0

하나는 개체 매개 변수를 보내는 것입니다. C# Object의 예제는 기본 클래스 &입니다. 파생 클래스를 가질 수있는 Object 유형의 매개 변수를 전달할 수 있습니다. 구현시이 객체를 원하는 파생 유형으로 다시 캐스트 할 수 있습니다. 특정 속성조차도이 방법으로 설정할 수 있습니다.

+0

그 이후 아주 좋은 솔루션이 안전 입력되지 않고 적어도 하나의 객체 지향 원칙에 위배되지 않는 일반적인 유형으로 Object 클래스를 사용하고 특정 클래스로 캐스팅 즉 Liskov 치환 원리. 게다가 생성 할 구체적인 클래스에는 각각의 구성에 대해 서로 다른 수의 인수가 필요할 수 있습니다. – Christian

+0

동의합니다. 유형이 안전하지 않습니다. 다른 수의 인수에 관해서는 다른 유형으로 구성된 유형을 가질 수 있습니다. –

+0

서로 다른 구체적인 유형에 대한 생성 인수를 저장하는 데이터 구조를 의미합니까? 이 경우 새 구조를 추가 할 때마다 데이터 구조가 변경되어야합니다. – Christian

0

자세한 내용이 없으면 쉽지 않습니다. 한 가지해야 할 일은 구체적인 팩토리 클래스의 생성자에 인수를 전달하는 것입니다. 다른 인수에 대해서는 다른 팩토리 인스턴스를 만들어야하는데, 이는 최상의 솔루션이 아닐 수도 있지만, 이는 세부 사항에 달려 있다고합니다.

예 :

 
    GUIFactory factory = new WinFactory(WIN_9x_THEME); 
    Button greyButton = factory.createButton(); 
    factory = new WinFactory(WIN_VISTA_THEME, 50); 
    Button semiTransparentButton = factory.createButton(); 
+0

이것은 하나의 방법이지만 패턴의 추상성을 놓치고 있습니다. 지적했듯이 팩토리 클래스는 새로운 인수 값 집합마다 다시 인스턴스화해야합니다. 팩토리 클래스를 거치지 않고 concrecte 클래스를 직접 인스턴스화 할 수도 있습니다. – Christian

+0

@Christian : 코딩 중 인수 집합의 조합을 알고 있다면 공장 용 공장을 가질 수 있습니다. 이는 조금 복잡해 지므로 Dependency Injection을 기반으로 한 솔루션이 더 적합합니다. 결국 그것은 모두 특정 언어와 응용에 달려 있습니다. –

+0

흠 ... 공장의 공장; 코드 예제가 있습니까? 언어와 응용 프로그램에 따라 언어와 응용 프로그램을 모르는 패턴이 아닌가요? – Christian

관련 문제