본문 바로가기

💻 개발IT/Design Patterns

5. Structural 패턴 - Composite Pattern

문제 정의

메뉴와 메뉴아이템은 아래와 같은 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 : 표현

 

 

반응형