[Design Pattern] 데코레이터 패턴
데코레이터 패턴
데코레이터는 우리 말로 '장식'이다. 이름 그대로 그러한 장식(기능)들을 쉽게 추가할 수 있도록 돕는 패턴을 말한다.
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());
}
}
'Design Pattern' 카테고리의 다른 글
[Design Pattern] 커맨드 패턴 (0) | 2020.02.14 |
---|---|
[Design Pattern] 어탭터 패턴과 퍼사드 패턴 (0) | 2020.01.31 |
[Design Pattern] 팩토리 메서드 패턴과 추상 팩토리 패턴 (0) | 2020.01.17 |
[Design Pattern] 옵저버 패턴 (0) | 2020.01.10 |
[Design Pattern] 디자인 패턴이란? (0) | 2020.01.09 |
댓글
이 글 공유하기
다른 글
-
[Design Pattern] 어탭터 패턴과 퍼사드 패턴
[Design Pattern] 어탭터 패턴과 퍼사드 패턴
2020.01.31 -
[Design Pattern] 팩토리 메서드 패턴과 추상 팩토리 패턴
[Design Pattern] 팩토리 메서드 패턴과 추상 팩토리 패턴
2020.01.17 -
[Design Pattern] 옵저버 패턴
[Design Pattern] 옵저버 패턴
2020.01.10 -
[Design Pattern] 디자인 패턴이란?
[Design Pattern] 디자인 패턴이란?
2020.01.09