티스토리 뷰
정의
💡 그룹의 여러 요소들을 동일한 인터페이스를 구현한 개별 객체 하나로 묶어 동일한 인터페이스로 접근하여 처리할 수 있는 패턴이다.
설명
하나의 인터페이스를 최상위 노드로 가지는 트리형태의 하위 타입 요소(Component)와 이를 포함하는 복합 객체(Composite)를 만들어 최상위 노드의 인터페이스로 복합요소를 사용하는 디자인패턴을 얘기한다.
객체 모델
Composite
- 복합 객체로 여러 Component 들을 포함하고 있는 객체이다.
public class Composite implements Component{
List<Component> components;
public Composite(List<Component> components) {
this.components = components;
}
@Override
public void operation() {
components.forEach(Component::operation);
}
}
Leaf
- Component를 구현한 구현체 들로 복합 객체에서 포함할 수 있는 구현체를 의미한다.
Component
- 복합 객체및 각 요소들을 사용할 수 있도록 돕는 인터페이스
@Slf4j
public class Leaf implements Component{
@Override
public void operation() {
log.info("Leaf - {}", 1);
}
}
public interface Component {
void operation();
}
Client
- Component 를 통해 복합 객체를 사용할 객체이다.
public static void main(String[] args) {
List<Component> components =
Arrays.asList(new FirstLeaf(), new SecondLeaf());
composite = new Composite(components);
composite.operation();
}
예제코드
👍 장점
클라이언트를 변경하지 않아도 새로운 요소를 추가할 수 있어 OCP(Open-Closed Principle)를 지킬 수 있다.
개인적인 생각에 활용 방법
여러개의 정책을 동시 적용할 때 트리구조로 정책을 만들고 스프링 빈(Bean)으로 등록해 동적으로 추가해 나갈 수 있을 것으로 보인다.
참조
'architecture > Design Pattern' 카테고리의 다른 글
[디자인 패턴] 파사드 패턴(Facade Pattern) (0) | 2022.09.23 |
---|---|
[디자인 패턴] 프록시와 데코레이터 패턴 (0) | 2022.09.22 |
[디자인 패턴] 브릿지 패턴 (Bridge Pattern) (0) | 2022.09.18 |
[디자인 패턴] 어댑터 패턴 ( Adapter Pattern ) (0) | 2022.09.15 |
[디자인 패턴] 프로토타입 ( Prototype ) 패턴 (0) | 2022.09.14 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 메모리 파편화
- 동적 타입 언어
- SpringBoot 2.2
- 정적 타입 언어
- pool
- 뾰족함
- 메모리 단편화
- RestAssured
- Memory Fragmentation
- 컴포짓 패턴
- ATDD
- 외부 단편화
- 육각형 아키텍처
- Object Pool
- 수직 분할
- 클린 아키텍처
- java
- 동적 디스패치
- multimap
- Session
- OOP
- pass by value
- 수평 분할
- Sticky Session
- Clean Architecture
- pass by reference
- 객체 풀
- 세션 불일치
- 내부 단편화
- 장애 해결기
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함