Composite Pattern 컴포지트 패턴
컴포지트 패턴은 구조 패턴으로, 객체를 트리 구조로 관리할 수 있도록 해줍니다.
구성요소
- Component :
- Client가 Leaf와 Composite에게 접근할 수 있도록 해주는 인터페이스
- Leaf :
- 내부에 다른 클래스 요소를 포함하지 않는, 가장 밑 계층 요소
- Composite :
- 내부에 다른 클래스 요소를 포함하고 있는 요소. (leaf를 포함하고 있는 요소)
- Client : Component를 통해 외부에서 메세지를 요청하는 객체.
장단점
장점
- 복잡한 트리 구조의 클래스들을 편하게 관리할 수 있습니다. (다형성과 재귀)
- 기존의 코드를 수정하지 않고도 구조에 포함되는 새로운 클래스를 추가할 수 있습니다. (개방/폐쇄원칙)
단점
- 기능이 많은 클래스를 Component 인터페이스에 포함될 수 있도록 설계하는 것이 어려울 수 있습니다. 또는 Component 인터페이스가 과도하게 추상화(일반화)되어 있어 다른 클래스를 포함하기 어려울 수도 있습니다.
Composite Pattern 컴포지트 패턴 구현
component 필통 인터페이스
public interface 필통 {
void 연필넣기(연필 연필);
void 지우개넣기(지우개 지우개);
}
Composite 필통구현
public class 필통구현 implements 필통{
private List<연필> 연필들;
private List<지우개> 지우개들;
public 필통구현() {
this.연필들 = new ArrayList<>();
this.지우개들 = new ArrayList<>();
}
@Override
public void 연필넣기(연필 연필) {
연필들.add(연필);
}
@Override
public void 지우개넣기(지우개 지우개) {
지우개들.add(지우개);
}
@Override
public String toString() {
return "필통구현{" +
"연필들=" + 연필들.size() +
", 지우개들=" + 지우개들.size() +
'}';
}
}
Leaf 연필
public class 연필 {
@Override
public String toString() {
return "연필";
}
}
Leaf 지우개
public class 지우개 {
@Override
public String toString() {
return "지우개";
}
}
Client
public class Client {
public static void main(String[] args) {
필통 필통 = new 필통구현() ;
필통.연필넣기(new 연필());
필통.지우개넣기(new 지우개());
System.out.println("필통 = " + 필통);
}
}
필통 = 필통구현{연필들=1, 지우개들=1}
출처
- https://www.geeksforgeeks.org/composite-design-pattern/?ref=gcse
- https://refactoring.guru/design-patterns/composite
- https://www.tutorialspoint.com/design_pattern/composite_pattern.htm
'JAVA > DesignPattern' 카테고리의 다른 글
Design Pattern 디자인 패턴 Facade Pattern 파사드 패턴 (0) | 2021.12.18 |
---|---|
Design Pattern 디자인 패턴 Decorator Pattern 데코레이터 패턴 (0) | 2021.12.18 |
Design Pattern 디자인 패턴 Bridge Pattern 브릿지 패턴 (0) | 2021.12.16 |
Design Pattern 디자인패턴 Adapter Pattern 어답터 패턴 (0) | 2021.12.16 |
Design Pattern 디자인패턴 Prototype Pattern 프로토타입 패턴 (0) | 2021.12.15 |