문제 정의
메뉴와 메뉴아이템은 아래와 같은 tree형식으로 표현할 수 있다.
보통은 분기문으로 instance of(type) 하여 확인할 수 있으나
Composite Pattern에서는 이를 손쉽게 해결할 수 있다.
해결 방법
메뉴아이템과 메뉴는 모두 하나의 Component를 상속하고 있다. (MenuComponent는 Item, Menu 모두 커버할 수 있다)
단지 동일한 interface를 제공하기 위한 class여서 모든 operation을 exception이 나도록 처리한다.
Composite Pattern
Transparency (Child 관련 함수가 Component에 존재)
tree구조의 object 계층을 표현하고 이들을 동일한 Interface로 나타내는 패턴
Iterator
MenuItem은 자식이 없지만 일관성(모든 노드는 iterator를 가지고 있다)을 위해 NullIterator 만들어준다
pre-order 순서대로 진행된다.
Safety
add, remove, getChild는 Composite에만 존재
컴파일에 Leaf에서 add, remove, getChild하는 것을 걸러낼 수 있다.
Decorator pattern vs. Composite
공통점 : 구조적으로 비슷하다 (recursive composition)
차이점 (목적)
- Decorator pattern : subclassing 없이 객체의 responsibility 추가
- Composite pattern : 표현
반응형
'💻 개발IT > Design Patterns' 카테고리의 다른 글
3. Behavior 패턴 - Visitor Pattern (0) | 2022.07.19 |
---|---|
3. Behavior 패턴 - Command Pattern (0) | 2022.07.19 |
6. Compound 패턴 - MVC Pattern (0) | 2022.03.12 |
5. Structural 패턴 - Bridge Pattern (0) | 2022.03.10 |
5. Structural 패턴 - Adapter Pattern (0) | 2022.03.06 |
5. Structural 패턴 - Decorator Pattern (0) | 2022.03.05 |
4. Creational 패턴 - Singleton Pattern (0) | 2022.03.04 |
4. Creational 패턴 - Builder Pattern (0) | 2022.03.03 |