2016-11-30 2 views
3

그림처럼 요소의 트리를 표현하기위한 I는 복합 패턴을 구현 : enter image description here액세스 자바

을하지만 잎의 목록처럼,이 나무의 잎에 액세스 할 수있는 방법 . 방문자를 구현해야합니까?

+0

구현 내용을 표시 – Andrew

답변

0

잎은 다음과 같이 구현됩니다 :

public class Leaf{ 

    private List<Leaf> leaves; 

    ...... 
} 

그리고 당신이 이상적으로 다른 디자인 패턴을 가질 필요가 없습니다.

당신은 관리자직원 사이의 관계로 생각할 수 있습니다.

직원 인 관리자는 해당 관리자로 근무하는 직원 목록을 보유 할 수 있습니다.

public class Employee{ 

    private List<Employee> workingUnderHim; 

    ...... 
} 
+0

좋습니다, 감사합니다; 하지만이 모든 경우의 목록처럼 모든 직원의 목록을 포함하고 싶다면? –

+0

@ MaVeRicK_91 어디에서 보관하고 싶습니까? Employee 클래스에서 Employees 클래스를 가져와야하는 경우 해당 필드에 대한 getter 만 가질 수 있습니다. –

+1

나는 이것에 동의하지 않는다. '잎사귀'는 다만 잎이다, 다른 잎의 어떤 지식도 없다. 당신이주는 예제는 잎과 복합체 인 동시에 하나의 클래스 인 Employee 만 가지고 있기 때문에 오해의 소지가 있습니다. 그러나 일반적인 경우는 설명하지 않습니다. –

0

위키피디아의 수업 다이어그램을 보았지만 슬프게도 잘못된 것입니다.

Composite Design Pattern

당신이 볼 수 있듯이, ComponentComposite 사이의 연관이 동일하지 않습니다 :

  • Composite 집계 Component들 (예를 들어,이 사람은 GoF의 책에 대해 정확
  • Leaf에는 자식이 없습니다.
또한

, Composite은 주어진 루트 구성 요소, 당신이 하나를 사용할 수 있습니다 추측에 대한 모든 잎을 얻을 수있는 방법 getChild(int n) n 번째의 아이 컴퍼넌트를 얻기 위해 (당신은 단순히 이전 목록의 n 번째 요소를 얻을 수)

있다 이 Tree Traversal 알고리즘 중.

+0

하지만, getChild 메소드는, Component의 List의 n 번째의 잎 요소가 될 수 없었던, 오브젝트 합성의 n 번째의 아이를 돌려줍니다. –

+0

물론, 위키 피 디아가 내가 말한 것만 큼 잘못되지는 않았지만 약간 부정확하다는 사실을 지적하는 것이 었습니다 ... –