2013-08-21 6 views
2

기본적으로 모든 클래스는 Element이라는 기본 클래스에서 파생되지만 특정 순간에는 구조에 파생 요소가 포함될 수 있습니다.방문자 인터페이스에서 파생 된 모든 유형을 지정하지 않고 방문자 패턴을 구현합니까?

방문자는 여러 가지 스타일로 요소를 인쇄하고 인터페이스 ElementVisitor을 구현합니다.

방문자 인터페이스에서 모든 파생 유형을 지정하지 않고 방문자 패턴을 구현할 수 있습니까? 대안 일 것입니다 무슨

그렇지 않은 경우는, ElementElementVisitor 우리가 언제하지만 언제 편집 할 확장 할 수 있어야하는 프레임 워크 수준의 구성 요소는 주어진. 그래서 같은

Element 수 언제 acceptList<ElementVisitor> :

class Element 
{ 
    public void accept(List<ElementVisitor> actions) { 
     foreach(ElementVisitor action : actions) 
     { 
      action.visit(this); 
     } 
    } 
} 

참고 : 프레임 워크가 생산 단계에 아직도있다, 그래서 방문자 패턴이 허용되지 않을 경우 설계가 계속 변경 될 수 있습니다.

instanceof이 유일한 방법은 무엇입니까? 내가 볼 수있는 다른 대안은 무엇입니까?

+0

"여러 다른 스타일로 요소 인쇄"는 무엇을 의미합니까? – stan0

+0

기본적으로 요소에는 데이터가 포함되어 있으며 각 방문자는 관련 데이터 만 인쇄합니다. – Chad

답변

1

작업을 자주 확장하려면 방문자 패턴을 선택하는 것이 좋습니다. 그러나 요소가 자주 확장 될 경우 최적의 방법은 아닙니다. 적어도 방문자가 요소의 공통 조상에 포함되지 않은 구체적인 요소의 기능을 필요로하는 한.

방문객을 통해 구현 된 작업이 요소 클래스보다 안정적인 경향이있는 경우 방문자 패턴을 사용하는 것보다 모든 구체적인 요소로 구현 된 조상 또는 인터페이스에서 작업을 추상 메서드로 정의하는 것이 좋습니다.