Design Pattern

[Design pattern] Whole-Part

mongyang 2013. 2. 21. 16:52

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