2011-01-14 5 views
0

나는 복합 패턴의 리프 클래스입니다. 이 클래스는 유형 A 또는 유형 B 중 하나 일 수있는 특성을 갖습니다. 유일한 공용 인터페이스는 유형이 Object입니다.속성에 대해 가능한 두 가지 유형

어떻게 지원해야합니까?

나는

  1. 각 유형에 대한 추가 방법이있을 수 있습니다. 그러나 이것은 A와 B 타입의 두 속성을 가져야하고 올바른 속성을 얻고 자 할 때 null을 확인해야 함을 의미합니다.

  2. 에는 Object 유형의 하나의 속성이 있습니다. 그 재산을 얻을 때 그것이 어떤 종류의 경우인지 확인해야한다는 것을 의미합니다.

이 유형의 문제에 가장 적합한 해결책은 무엇입니까? 아니면 더 나은 솔루션?

답변

1

개인적으로 나는 Object 속성 접근 방식을 선택했습니다. 속성에서 반환 할 개체 유형을 문서화하고 호출 코드에서 사용 가능한 언어 기능을 사용하여 개체 형식을 결정하고 필요에 따라 형 변환합니다. 두 가지 속성을 구현하는 것은 언어의 "is-a"연산자를 다시 개작하는 것이며, 가능한 유형을 추가해야하는 경우 신속하게 관리하기 어려워집니다.

0

유형 추상화를 지원하는 언어 (예 : Java의 제네릭 또는 C++의 템플릿)를 사용하는 경우 해당 속성을 일반 유형으로 설정할 수 있습니다. 그렇지 않다면, Object를 사용하십시오. 각 타입에 대한 메소드를 갖는 것은 추악한 해킹입니다. 그리고 나중에 타입을 추가 할 경우에는 변함이 없습니다.

+0

나는 OP가 제네릭을 적용 할 수없는 경우를 나타내는 것으로 믿습니다. 예 : 객체를 처리하는 모든 사람이 미리 * 어떤 객체 유형을 포함하는지 알 수 없으므로 유형을 사용하려면 사전에 일반 인자를 알아야합니다. – cdhowie

관련 문제