👣 문제 상황
코드 가독성과 유지보수성을 높이기 위해
개별 객체와 집합 객체를 동일하게 다루고 싶은 경우가 존재한다.
예를 들어, 포토샵과 같은 프로그램을 설계한다고 가정해본다.
개별 도형들에 '파랑색으로 색칠하기' 기능을 적용할 때,
각 도형을 그룹으로 묶은 집합 도형에도 '파랑색으로 색칠하기' 기능을 적용할 수 있어야
프로그램 사용자가 '각 도형 색칠하기'와 '묶인 도형 색칠하기'라는 2 개의 버튼을 사용하지 않고
'색칠하기' 버튼 1개로 작업을 진행할 수 있다.
목적 : 사용자가 단일 객체와 복합 객체 모두 동일하게 다루도록 하고 싶을 때
👣 해결 방법
/** "Component" */
interface Graphic {
public void print();
}
/** "Composite" */
class Shapes implements Graphic {
private List<Graphic> mChildGraphics = new ArrayList<Graphic>();
public void print() {
for (Graphic graphic : mChildGraphics) {
graphic.print();
}
}
public void add(Graphic graphic) {
mChildGraphics.add(graphic);
}
}
/** "Leaf" */
class Ellipse implements Graphic {
public void print() {
System.out.println("Blue");
}
}
/** Client */
public class Program {
public static void main(String[] args) {
Ellipse ellipse1 = new Ellipse();
Ellipse ellipse2 = new Ellipse();
Ellipse ellipse3 = new Ellipse();
Ellipse ellipse4 = new Ellipse();
CompositeGraphic graphic = new CompositeGraphic();
graphic.add(graphic1);
graphic.add(graphic2);
graphic.add(graphic3);
graphic.add(graphic4);
graphic.print();
}
}
'디자인 패턴' 카테고리의 다른 글
컴포지트 패턴 적용 - SecurityFilterChain 적용 (0) | 2023.08.30 |
---|---|
Facade Pattern - 구조 (0) | 2023.07.30 |
객체 지향 프로그래밍 (0) | 2023.07.21 |
Programming Paradigm (0) | 2023.07.19 |
MVC Pattern - 아키텍쳐 (0) | 2023.07.19 |