2012-07-02 5 views
0

자바에서 팩토리 패턴을 구현하려고합니다. 내 구체적인 선택을 할 때 모든 구체적인 구현을 추가 할 공장에서 HashMap과 같은지도가 있습니다. 키는, MyAbstract claass의 abstract 메소드 getImplName()에 의해 정의됩니다.사용자 정의 팩토리 패턴 구현

내 요구 사항은 MyAbstractClass를 확장하고 getImplName()을 정의 할 때 수동으로 수행하는 코드 대신 키 값 쌍을 공장 맵에 자동으로 추가해야하는 경우입니다. 이것이 가능한가 ? 나는 커스텀 어노테이션을 사용하려고 생각했다. 귀하의 제안을 알려주십시오

+0

아니요, 실제로는 설명 할 수 없습니다. 하위 클래스가 아무 것도하지 않도록 할 수는 없습니다. 당신은 의존성 주입이나 공장 이외의 다른 것에 더 행운을 가질 것입니다. –

답변

2

추상 클래스의 생성자에서 getImplName()을 호출하여 맵에 추가 할 수 있어야합니다. 그렇지 않으면 전달되어야 할 맵 인스턴스가 하나 있다고 가정합니다. .

또는 생성자에서 매개 변수를 추가하여 필요한 값을 가져올 수 있습니다.

0

팩토리 요소가 팩토리 메서드를 인식해야하는지 여부에 대해 논쟁이 있습니다.
나는 당신이 당신의 요소가 공장을 인식하려면 다음과 같은 방법을 추천 할 것입니다 :
MyFactory 내부 필드
MyAbstractClass를 확장 프로그래머가 강제로이 방법으로는 HashMap을 가진 공장이다

public abstract class MyAbstractClass { 
    public MyAbstractClass(MyFactory factory) { 
     factory.addElement(getImplName(),this); 
    } 

    public abstract String getImplName(); 
} 

public class MyTestClass extends MyAbstractClass { 
    public MyTestClass(MyFactory factory) { 
    super(factory); 
    } 
} 

수퍼 클래스 CTOR을 호출하여 클래스 객체를 팩토리에 추가하는 CTOR을 제공합니다.