Whole-Part
- 의미적 단위로 컴포넌트를 모으는데 도움을 준다.
- Whole 객체(집합 컴포넌트)는 그것을 구성하는 Part(컴포넌트) 객체들을 캡슐화 한다.
문제
- 복합 객체는 작은 객체로 분해되거나 기존에 있던 객체들로 구성.
- 재사용성, 가변성을 지원하며 객체들을 다른 유형의 집합 객체로 재조합.
- 클라이언트는 집합 객체를 자체 구성 부분에 직접 액세스를 허용하지 않는 원자적 개체로 인식.
해법
- 더 작은 객체들을 캡슐화하는 컴포넌트를 도입해서, 클라이언트가 컴포넌트의 구성 부분들에
직접 액세스 할 수 없도록 막는다.
- 캡슐화된 객체들의 기능에는 직접 액세스할 수 없으며 이 객체들의 기능에 액세스하기 위해서 집합 객체의
인터페이스를 통해야 한다.
Whole-Part 패턴의 일반 원칙은 다음 세가지 유형의 관계에 적용.
- 어셈블리 파트
- 컨테이너 컨텐트
- 컬렉션 멤버
구조
동작
구현
- Whole 객체의 공용 인터페이스를 설계.
- Whole 객체를 Part 객체들로 분리하거나, 기존에 있던 Part 객체들로부터 Whole 객체를 종합.
- 만약 상향식 방식을 따른다면, 컴포넌트 라이브러리나 클래스 라이브러리로부터 기존에 있던Part
객체들을 사용.
- 만약 하향식 방식을 따르다면, Whole 객체의 서비스들을 작은 협력 서비스들로 분할.
- Part 객체들에 제공하는 서비스들을 활용해 Whole 객체의 서비스들을 상세히 규정
- Part 객체들을 구현
- Whole 객체를 구현
장점
- Part 객체의 가변성을 지원한다.
- 역할의 분리가 가능하다.
- 재사용성을 지원한다.
단점
- 우회 방식을 사용하기 때문에 효율성이 떨어진다.
- Part 객체들로 분해하는 과정이 상당히 복잡하다.
'Design Pattern' 카테고리의 다른 글
[Design pattern] Proxy (0) | 2013.02.21 |
---|---|
[Design pattern] Master-Slave (0) | 2013.02.21 |
[Design pattern] 팩토리 매서드 패턴 (0) | 2013.02.20 |
[Design pattern] 빌더 패턴 (0) | 2013.02.20 |
[Design Pattern] Thread-Safe Singleton (0) | 2013.02.13 |