나는 데이터 객체의 네 가지 유형이있는 경우했습니다 :생성자 인수에 따라 특정 하위 유형을 인스턴스화
class DataTypeAlpha extends DataType
class DataTypeBeta extends DataType
class DataTypeGamma extends DataType
class DataTypeDelta extends DataType
와 GUI 프레임 워크에서 네 가지의 TreeNode 유형, 랩 된 데이터 형식에 고유 각각 :
class AlphaTreeNode extends MyAppTreeNode
...
이제는 DataType 인스턴스가 있고 MyAppTreeNode의 새 인스턴스가 필요한 패턴이 자주 있습니다. 나는 두 가지 해결책을 본다. 해결책 하나
class DataType {
// Instantiates and returns the appropriate MyAppTreeNode for this DataType
abstract MyAppTreeNode createTreeNode();
}
용액 2 : 하나의 다형성을 사용
class MyAppTreeNode {
static MyAppTreeNode createTreeNodeForDataType(DataType dataType) {
if(dataType instanceOf DataTypeAlpha) return new AlphaTreeNode((DataTypeAlpha)dataType)
else if (dataType instanceOf DataTypeBety) return new BetaTreeNode((DataTypeBeta)dataType)
else if ...
else if ...
else throw new IllegalArgumentException();
}
}
솔루션보다 짧은 "고급"이다. 하지만 DataType 클래스는 내가 사용하는 GUI 프레임 워크에 대한 지식이 없다는 것을 선호합니다. 어쩌면 두 개의 다른 GUI 프레임 워크를 사용할 수도 있습니까?
세 번째 해결책이 있습니까? 이 질문에 Guice 태그를 추가했습니다. Guice 나 다른 의존성 주입 라이브러리에 도움이 될만한 기능이 있습니까? 나는이에 대한 공장 패턴을 사용합니다 물론
- 하지만 공장 내부에 여전히 문제로 남아있어 :
비슷한 질문을 통해 찾고.
제네릭과 비슷한 일반적인 해결책을 사용하는 방법은 무엇입니까? http://insidecoding.com/2011/09/07/the-generic-dao-pattern-in-java-with-spring-3-and-jpa-2-0/ –