데코레이터 패턴


데코레이터는 우리 말로 '장식'이다. 이름 그대로 그러한 장식(기능)들을 쉽게 추가할 수 있도록 돕는 패턴을 말한다.

 

Window에 대해 이야기해보자. (여기서 Window는 화면을 말한다. GUI 해본 사람이라면 알겠지??)

Window 인터페이스를 정의하자. 기능은 2가지만 나타냈다.

public interface Window {
void draw(); // draws the Window
String getDescription(); // returns a description of the Window
}

 

위의 인터페이스의 구현체 하나를 만들자.

public class SimpleWindow implements Window {
@Override
public void draw() {
// draw window
}
@Override
public String getDescription() {
return "simple window";
}
}

 

자, 이제 Window 인터페이스를 구현한 추상 클래스를 만든다. 이 추상 클래스로 인해 기능을 유연하게 추가할 수 있다.

abstract class WindowDecorator implements Window {
protected Window decoratedWindow; // the Window being decorated
public WindowDecorator (Window decoratedWindow) {
this.decoratedWindow = decoratedWindow;
}
}

 

위의 추상 클래스를 상속받아 디테일한 기능을 구현한다. 보면 생성자에 추상 클래스의 생성자로 위임하는걸 볼 수 있다.

public class HorizontalScrollBarDecorator extends WindowDecorator {
public HorizontalScrollBarDecorator (Window decoratedWindow) {
super(decoratedWindow);
}
@Override
public void draw() {
drawHorizontalScrollBar();
decoratedWindow.draw();
}
private void drawHorizontalScrollBar() {
// draw the horizontal scrollbar
}
@Override
public String getDescription() {
return decoratedWindow.getDescription() + ", including horizontal scrollbars";
}
}

 

Main Entry에서 사용하는 코드

public class Main {
public static void main(String[] args) {
// create a decorated Window with horizontal and vertical scrollbars
Window decoratedWindow = new HorizontalScrollBarDecorator(
new VerticalScrollBarDecorator(new SimpleWindow()));
// print the Window's description
System.out.println(decoratedWindow.getDescription());
}
}

 

댓글

댓글을 사용할 수 없습니다.