ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 구조패턴 : 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

    댓글

Designed by Tistory.