-
구조패턴 : Composite 패턴디자인패턴 2013. 1. 25. 09:30
분류 : 구조패턴(Structural Patterns)
정의 :
객체의 그룹들이 하나의 인스턴스처럼 다뤄지도록 함.
트리 구조에서 부분-전체 구조를 나타냄.
용도 :
객체간의 구조과 개별 객체간의 차이를 두지 않아야 할때.
트리구조형태의 데이터를 다룰때 리프노드(leaf-node)와 가지(branch)를 구분해야 할때 사용.
Component
모든 컴포넌트에 대한 추상화. (여러 객체의 조합도 가능)
구성(composition) 내부의 객체들에 대한 인터페이스를 선언.
재귀구조에서 컴포넌트의 부모에 접근하기위한 인터페이스를 정의하고, 적절하게 구현함.
Leaf
구성(composition)에서 리프(leaf) 객체를 나타냄.
모든 컴포넌트 메소드들을 구현함.
Composite
컴포넌트의 구조를 보여줌.(컴포넌트는 자식을 가지고 있음.)
자식을 다루는 메소드들을 구현함.
모든 컴포넌트 메소드들을 구현함. 일반적으로는 해당 메소드들을 자식에게 위임함.
소스
public interface Graphic { //그래픽을 출력함. public void print(); } import java.util.List; import java.util.ArrayList; public class CompositeGraphic implements Graphic { //자식 그래픽들의 컬렉션 private List
childGraphics = new ArrayList
(); //그래픽을 출력함. @Override public void print() { for (Graphic graphic : childGraphics){ graphic.print(); } } //해당 그래픽을 컬렉션에 추가함. public void add(Graphic graphic) { childGraphics.add(graphic); } //해당 그래픽을 컬렉션에서 제거함. public void remove(Graphic graphic) { childGraphics.remove(graphic); } } // 리프(leaf) public class Ellipse implements Graphic { private String name = null; Ellipse(String name){ this.name = name; } //그래픽을 출력함. @Override public void print() { System.out.println("Ellipse : " + name); } } //클라이언트 프로그램 public class Program { public static void main(String[] args) { //4개의 ellipses 객체를 초기화함. Ellipse ellipse1 = new Ellipse("1"); Ellipse ellipse2 = new Ellipse("2"); Ellipse ellipse3 = new Ellipse("3"); Ellipse ellipse4 = new Ellipse("4"); //3개의 composite 그래픽들을 초기화함. CompositeGraphic graphic = new CompositeGraphic(); CompositeGraphic graphic1 = new CompositeGraphic(); CompositeGraphic graphic2 = new CompositeGraphic(); //그래픽들을 구성함. graphic1.add(ellipse1); graphic1.add(ellipse2); graphic1.add(ellipse3); graphic2.add(ellipse4); graphic.add(graphic1); graphic.add(graphic2); //전체 그래픽들을 출력함.("Ellipse"가 4번 출력됨.) graphic.print(); } }
참고자료
http://en.wikipedia.org/wiki/Composite_pattern
http://ko.wikipedia.org/wiki/%EC%BB%B4%ED%8F%AC%EC%A7%80%ED%8A%B8_%ED%8C%A8%ED%84%B4
'디자인패턴' 카테고리의 다른 글
구조패턴 : Facade 패턴 (0) 2013.01.29 구조패턴 : Decorator 패턴 (0) 2013.01.28 구조패턴 : Bridge 패턴 (0) 2013.01.23 구조패턴 : Adapter (Wrapper) 패턴 (0) 2013.01.21 생성패턴 : Singleton 패턴 (0) 2013.01.16 댓글