2009년 11월 10일 화요일

Decorator Pattern

Decorator Pattern

스펀지 케이크가 1개 있다고 가정합니다.
크림을 바르면 크림케이크, 여기에 딸기를 얹으면 딸기케이크, 초콜릿으로 장식을 하고 이름을 쓰고 나이 수만큼 초를 꽂으면 생일 케이크가 완성됩니다.
스펀지 케이크도, 크림케이크도, 딸기 케이크도, 생일 케이크도 처음에는 다 같은 스펀지 케이크입니다. 그러나 크림을 바르고 딸기를 얹는 등 다양한 장식을 하면 더욱 맛있고 각각의 목적에 어울리는 케이크가 됩니다.

오브젝트(객제)도 이런 케이크와 비슷한 경우가 있습니다. 우선 스펀지 케이크와 같은 중심이 되는 오브젝트가 있습니다. 이 오브젝트에 장식이 되는 기능을 하나씩 추가하면 좀더 목적에 맞는 오브젝트가 완성됩니다. 이와 같이 오브젝트에 장식을 해 나가는 디자인 패턴을 Decorator 패턴이라고 합니다.


예제 프로그램

: 여기에서 만들 예제 프로그램은 문자열의 주변에 장식을 만들어서 표시하는 것입니다.
  장식이란 -, +, | 과 같은 특수문자

클래스 종류

예제프로그램의 클래스 다이어그램


Decorator 패턴의 등장인물

Component의 역할
: 기능을 추가할 때 핵심이 되는 역할, 서두의 케이크에 비교하면 장식하기 전의 스펀지 케이크에
  해당합니다. Component역할은 스펀지 케이크의 인터페이스(API)만을 결정합니다
  예제프로그램에서는 Display 클래스

ConcreteComponent의 역할
: Component 역할의 인스턴스(API)를 구현하고 있는 구체적인 스펀지 케이크입니다.
  예제프로그램에서는 StringDisplay 클래스

Decorator(장식자)의 역할
: Component 역할과 동일한 인터페이스(API)를 가지며, 또한 이 Decorator 역할이 장식할 대상이
  되는 Component 역할도 가지고 있습니다. 이 역할은 자신이 장식하고 있는 대상을 알고있습니다.
  예제프로그램에서는 Border 클래스

ConcreteDecorator(구제척인 장식자)의 역할
: 구체적인 Decorator의 역할입니다.
  예제프로그램에서는 SideBorder 클래스와 FullBorder 클래스

Decorator 패턴의 클래스 다이어그램


출처 : Java 언어로 배우는 디자인 패턴 입문

댓글 없음:

댓글 쓰기