Whole-Part Design Pattern

Toggle Space Navigation Tree
Space Map

Whole-Part Design Pattern

결합하여 하나의 의미적 단위를 이루는 컴포넌트들을 모으는(aggregate)데 도움을 준다.
Whole 객체는 그것을 구성하는 컴포넌트들 즉 Part 객체들을 캡슐화한다.
Whole 객체는 부분들 간의 협력관례를 조직화하며, 자체 기능에 대한 공통 인터페이스를 제공한다.
Part 객체에 직접 액세스는 허용하지 않는다

Context(정황)

집합 객체 (aggregate Object) 를 구현해야 한다.

Problem (문제)

- 화학 모의 시스템
- 분자 객체는 원자 객체의 단순 집합이 아니다.
- 분자 객체는 화학적 성질과 같은 애트리뷰트를 가지며 회전과 같은 메소드를 가진다.
- 원자 단위에서는 존재하지 않던 동작이 분자 단위에 와서야 드러난다.

- Forces(영향력)
복합 객체는 작은 객체로 분해되거나 기존에 있던 객체들로 구성되어야 한다. 그래야 재사용성, 교체성을 지원하며, 구성 객체들을 다른 유형의 집합 객체로 재조합할 수 있다.
클라이언트는 집합 객체의내부 구성 부분에 직접 액세스를 허용하지 않는 최소단위 객체로 인지해야 한다.

Solution (해법)

더 작은 객체들을 캡슐화하는 컴포넌트를 도입해서, 클라이언트가 컴포넌트의 구성 부분들에 직접 액세스할 수 없도록 만든다.

이 집합객체는 하나의 의미적 단위로 간주된다.

Whole-Part Pattern 유형
 1. 어셈블리-파트(assembly-part)관계
  생산물에 해당하는 '어셈블리'와 그 생산물의 하위나 하위 부분들에 해당하는 '파트'들로 구분.
  파트들은 어셈블리의 내부구조에 따라 밀접하게 통합된다.
 2. 컨테이너-컨텐츠(container-contents)관계
  어셈블리-파트 관계에서 파트들만큼 민접한 결함이 아님.
  콘텐트들은 동적으로 추가, 제거 가능.

 3. 컬렉션-멤버(collection-members)관계
  유사한 객체를 묶는데 유용하다.
  컬렉션은 멤버들을 차례로 돌아가며 반복해서 각 멤버의 오퍼레이션을 수행하는 기능을 제공한다.
  컬렉션 내에 있는 멤버들은 서로 구별되지 않으며, 모두 동일하게 처리된다.

Implementation (구현)
 Whole 객체의 공용 인터페이스를 설계한다.
 클라이언트에게 제공해야 하는 기능
 Whole 객체를 Part 객체들로 분리하거나, 기존에 있던 Part객체들로부터 Whole객체를 종합한다.

 - Bottom-up
 - Top-down

 상향식이라면 기존에 있던 Part 객체들을 사용하며 그 객체들 간의 협력관계를 정의한다.  제공할 수 없는 기능은 새로운 Part 객체를 정의해 다른 Part들과 통합시킨다.
 하향식이라면 Whole 객체의 서비스들을 작은 협력 서비스들로 분할하고 이 협력 서비스들을 독립적인 Part 객체로 구현한다.

 Part 객체들이 제공하는 서비스들을 활용해 Whole 객체의 서비스들을 상세히 규정한다.
   - Relying on its own Environment
   - Delegation approach
   - Part객체들 간의 호출
 Part 객체들을 구현한다.
 Whole 객체를 구현한다.

결과 (Consequence)
   장점
    - Part 객체의 가변성(changeability)를 지원한다.
    - 역할의 분리(separation of concerns)가 가능하다.
    - 재사용성을 지원한다.
    단점
    - 우회 (indirection) 방식을 사용하기 때문에 효율성이 떨어짐.
    - Part 객체들로 분해하는 과정이 상당히 복잡하다.

 

Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.