-
[Design Pattern] 컴포지트(Composite) 패턴 - 디자인 패턴CSE/Design Pattern 2015. 6. 13. 10:34
Pattern #8 컴포지트 패턴
객체의 트리를 나타내는데 사용
패턴 요약- 기본 클래스와 이를 포함하는 컨테이너 클래스를 재귀적인(recursive) 형태로 표현- 객체들의 집합을 다룰 때 유용- e.g. 폴더 안의 파일동기회사에서 당신이 맡은 업무는 Drawing Tool 을 개발하는 것이다. 이 Drawing Tool은 직선, 사각형, 원 등의 그림을 그릴 수 있으며, 각
개체를 이동 및 속성 수정이 가능하다. 또한 몇 개의 개체를 묶어 하나의 Group 개체로 만들 수도 있다. 이러한 요구사항을 만족하기 위해서 어떻게 그림 개체 클래스들을 설계해야 되는가?
의도- Part-whole Hierarchy를 표현하기 위하여 객체들을 트리 구조로 구성- Client가 개개의 객체와 그룹 객체를 동일하게 취급할 수 있게 만든다.적용 범위- 객체들을 part-whole Hierarchy 고조로 표현하고자 할 때- 개개의 객체와 그룹 객체를 동일하게 취급하고자 할 때결과- Primitive 객체와 composite 객체로 구성된 클래스 hierarchy를 정의- Client code가 단순해진다.- 새로운 종류의 컴포넌트 객체를 추가하기 쉽다. => 기존의 코드를 수정하지 않아도 새 컴포넌트 추가 가능예제.
Component.java
123456package composite;public interface Component {public void show();}cs Composite.java
1234567891011121314151617181920212223242526package composite;import java.util.ArrayList;import java.util.List;public class Composite implements Component {private List<Component> childComponents = new ArrayList<Component>();public void add(Component component) {childComponents.add(component);}public void remove(Component component) {childComponents.remove(component);}public void show() {for (Component component : childComponents) {component.show();}}}cs Leaf.java
1234567891011121314151617package composite;public class Leaf implements Component {private String name;public Leaf(String name) {this.name = name;}public void show() {System.out.println(name);}}cs CompositeMain.java
12345678910111213141516171819202122232425262728package composite;public class CompositeMain {public static void main(String[] args) {Leaf leaf1 = new Leaf("1");Leaf leaf2 = new Leaf("2");Leaf leaf3 = new Leaf("3");Leaf leaf4 = new Leaf("4");Leaf leaf5 = new Leaf("5");Composite composite1 = new Composite();composite1.add(leaf1);composite1.add(leaf2);Composite composite2 = new Composite();composite2.add(leaf3);composite2.add(leaf4);composite2.add(leaf5);composite1.add(composite2);composite1.show();}}cs 'CSE > Design Pattern' 카테고리의 다른 글
[Design Pattern] 브릿지(Bridge) 패턴 - 디자인 패턴 (0) 2015.06.13 [Design Pattern] 프록시(Proxy) 패턴 (0) 2015.06.13 [Design Pattern] 어뎁터(Adapter) 패턴 - 디자인 패턴 (0) 2015.06.13 [Design Pattern] 데코레이터(Decorator) 패턴 - 디자인 패턴 (0) 2015.06.13 [Design Pattern] 파써드(Facade) 패턴 (0) 2015.06.13 [Design Pattern] 빌더(Builder) 패턴 - 디자인 패턴 (0) 2015.06.13