2012-01-30 3 views
23

대 복합 제가 디자인 패턴에 대한 과정을 마무리하고, 그리고 검토 음이 뭔가 건너 온 동안은 학기 중에 놓친 : 복합구성. 필자가 이해할 수 있었던 점은 오브젝트가 실제로는 전체 오브젝트를 캡슐화하는 반면 컴포지션은 오브젝트에 대한 포인터 만 보유 할 때 컴포지트라는 것입니다.디자인 패턴 구성

  1. 이게 맞습니까? 누군가 나에게 이것을 조금 더 잘 설명 할 수 있겠습니까?
  2. 언제 다른 것을 선호합니까?

답변

45

Composition

이것은 (정말로 패턴) 디자인 개념이다. 이 용어는 다른 객체를 포함하는 객체 하나를 설명하고자 할 때 사용됩니다. Composition over inheritance 토론에서 자주 발생합니다.

또한 구성은 강력한 소유권을 의미합니다. 하나의 개체 은 다른 개체의 (즉 수명주기 관리)을 소유합니다. 부모가 파괴되면 모든 어린이도 파괴됩니다. 그런 강한 관계가 없다면 (아이들은 부모보다 오래 살 수 있습니다) 우리는 집합체에 대해 말하고 있습니다.

위키 백과에 좋은 ​​예를 인용 : 예를 들어

하는 대학은 다양한 부서 (예를 들어, 화학)을 소유하고, 각 부서는 교수의 번호가 있습니다. 대학교가 문을 닫으면 부서는 더 이상 존재하지 않지만 해당 부서의 교수는 계속 존재합니다.. 따라서 대학은 부서의 구성으로 볼 수 있지만 부서는 교수 수 집합을 보유하고 있습니다. 또한 교수는 여러 부서에서 일할 수 있지만 부서는 하나 이상의 대학에 속할 수 없습니다.

소유권 관계 유형에 따라 구성 또는 집계 중에서 선택해야합니다.

Composite pattern

이 자식 노드 또는 간단한 (아마도 다른 아이를 포함하는) 다른 노드의 용기 일 수 친자 강한 관계를 설명하는 GoF의 디자인 패턴이다.

GUI 및 트리 구조와 같이 매우 일반적입니다. 예 : Java Swing에서 JPanel은 텍스트 필드, 레이블, 목록 등과 같은 다양한 컨트롤을 포함 할 수 있지만 다른 컴포넌트를 포함 할 수있는 다른 JPanel을 포함 할 수 있습니다.

일반적으로 컴포지트 디자인 패턴은 구성을 사용하지만 일부 경우 부모가 모든 자식을 소유 할 필요는 없습니다. GUI 예제를 계속하려면 한 패널을 가져 와서 다른 위치로 이동하십시오 (상위 패널을 변경하십시오).

+0

+1 두 가지를 설명하기 위해 +1하지만, OP * 역시 포인터 문제가 아니라 포함하는 데 도움이 필요했습니다. –

+0

@MattFenwick : 맞습니다. 몇 가지 설명과 따옴표 (집계에 대해서도)를 추가했습니다. –

+1

감사합니다. GoF 란 무엇입니까? – baruch