2011-12-20 3 views
10

question에는 instanceof의 무리 대신 방문자 패턴을 사용할 수 있다고합니다. Jmg은 "A, B, C를 자유롭게 변경할 수 없다면 방문자 패턴을 적용하여 동일한 결과를 얻을 수 있습니다."instanceof 스위치 대신 자바 방문자 패턴

내가 아는 한 내가 A, B 및 C 지원 방문자 (예 : accept() 메서드 있음)를 만들어야한다는 것을 이해합니다.

내 문제는 A, B 및 C를 변경할 가능성이 전혀 없다는 것입니다. 저는 외국 도서관에서 Car 객체를 얻었으며 wash() 메서드를 트럭, 경주 용 자동차 및 버스에만 한정하여 호출해야합니다.

instanceof과 함께 if-else-if 구조가 필요하다고 생각합니다. 내가 맞습니까?

+0

참조 http://stackoverflow.com/questions/14136721/converting-many-if-else-statements-to-a-cleaner-approach – Raedwald

+0

참조 http://stackoverflow.com/questions/18231983/java - instanceof-conditions와 함께 else-if-else-elseal-to-many-if-statements – Raedwald

답변

9

예, 방문자 패턴을 구현하려면 이제 모든 클래스가 동일한 서명을 가지고 있지 않으면 (따라서 모두 동일한 이름의 wash() 메소드가 있음) A, B 및 C의 소스에 액세스해야합니다. 이 경우 다형성을 사용하여 올바른 메소드를 호출 할 수 있습니다.

그렇지 않으면 소스 코드 수준에서 액세스 권한이없는 클래스에 기능을 추가 할 수 있습니다.

참고 : 방문자 패턴에 위키 백과 문서에 (http://en.wikipedia.org/wiki/Visitor_pattern)는 자바 예를 아래에 작은 각주가이 패턴에 대한보다 유연한 접근 방식에있다 accept 메소드를 정의하는 인터페이스를 구현하는 래퍼 클래스를 작성합니다. 래퍼는 생성자를 통해 초기화 될 수있는 CarElement를 가리키는 참조를 포함합니다. 이 방법은 각 요소에 인터페이스를 구현하지 않아도됩니다. 그것이 가능 모두 그래서 http://www.javaworld.com/javaworld/javatips/jw-javatip98.html

, 모든,하지만 당신이 원하는 작은 작업 클래스의 거대한 수를 제공합니다 : 그것은이 문서를 참조

[아래 글 자바 팁 (98) 문서를 참조]. 내가 너라면 instanceof에 붙어있을거야.