2012-01-16 5 views
1

자바 설계 관련 질문.특수 방법과 열거 형을 추가 매개 변수로 사용하는 것

4 가지 유형의 위젯 (활성, 비활성, 무효, 잠재력)을 유지해야하는 개체가 있습니다.

:이 같은 일련의 메서드를 더 좋을 것

내 질문은 등 제거, 수, 추가 말 : 이러한 유형의 각각에 대해, 나는 각에 작용 방법의 시리즈를 가지고

addInactive(Widget) 
getInactive() 
removeInactive(Widget) 
addActive(Widget) 
getInactive() 
removeInactive(Widget) 
addInvalid(Widget) 

등 ...

또는

내가 대신이 클래스 내부에 열거이 있어야합니다 WidgetStatus을 그들이 작업을 수행해야 할 때 다음 소비자는이 열거 전달할 것입니다. 이 대신에 단지 3 공개 방법을 초래할 것 :

add(Widget, WidgetStatus) 
get(WidgetStatus) 
remove(Widget, WidgetStatus) 

한 손에, 나는 그것이 필요한 매개 변수의 수를 유지뿐만 아니라 때문에 전문적인 방법을 사용하여 첫 번째 좋아하지만, 명시 적으로 호출하는 소비자의 손을 강제로 그들이 필요로하는 방법. 그러나 후자의 옵션은 API를 단순하게 유지하는 것으로 보이며 향후 더 많은 상태 유형을 추가하는 것을 쉽게 만듭니다.

생각하십니까?

답변

1

열거 형을 사용하면 더 깨끗한 API를 얻을 수 있으며 상태를 변경하려는 경우 훨씬 쉽게 유지 관리 할 수 ​​있습니다. 첫 번째 접근법에는 아무런 이유가 없습니다.

+0

나는이 접근법을 사용했다. 필자는 당면한 요구 사항을 포괄하고 API를 훨씬 단순하게 만들었다 고 생각합니다. 모든 사람들에게 감사드립니다. – sma

0

위의 동작을 포함하는 일부 전략 패턴으로 열거 형을 변환합니다. 그런 다음 추가/가져 오기/제거 메소드는 단순히 작업을 수행하기위한 전략에 위임합니다.

http://en.wikipedia.org/wiki/Strategy_pattern

+0

나는 그것도 생각했지만 전략 패턴이 불필요한 복잡성을 초래할 수 있다고 생각합니다. 추가/제거 등은 기본적으로 항목을 항목에 넣거나 제거하는 것입니다. 전략 패턴이 지나치게 복잡해 보입니다. – sma

1

WidgetStatus 위젯의 속성이 아닌 컨테이너이다. 당신을 위해 잘 될 것입니다 따라야 할 것입니다

Widget.setActive(false); 
add(Widget); 
+0

+1 스위스 육군 칼을 만들지 마라. 컨테이너는 위젯 API에 대해 절대적으로 더 많이 알 필요가 없다. (사실 그들은 "상태"를 가지고있다.) – Bohemian

+0

나는 여기에 동의하지만 실제로 위젯 자체에는 '상태'가 없습니다. 이것은 일종의 기억의 일입니다. 무효, 유효 등은 사용자 동작에 따라 런타임에 결정됩니다. 그래서,이 방법은 현실적으로 불가능합니다. – sma

관련 문제