Decorator Pattern 데코레이터 패턴
구조 패턴으로, 행동을 가진 객체를 둘러싸는 특별한 래퍼(Wrapper)를 통해 객체에 새로운 행동을 추가할 수 있도록 해주는 패턴입니다.
장단점
장점
- 서브클래스를 새로 만들지 않도고 새로운 메소드를 추가할 수 있습니다.
- 런타임에 객체에 대한 책임을 추가하고 삭제할 수 있습니다.
- 여러 개의 메소드를 합칠 수 있습니다.
- (단일책임원칙) 다양한 동작을 가진 단일 클래스를 여러개의 서브 클래스로 분리할 수 있습니다.
단점
- Decorator가 중첩(스택 구조)되어 있는 경우, Decorator 하나를 삭제하기 어렵습니다.
- Decorator가 순서 없이 중첩되어 있는 경우, Decorator 하나를 추가하기 어렵습니다.
- 여러 층의 초기 구성 코드가 보기 좋지 않을 수 있습니다.
Decorator Pattern 데코레이터 패턴 구현
도형 Interface
public interface 도형 {
void 그리기();
}
세모(Class)
public class 세모 implements 도형{
@Override
public void 그리기() {
System.out.println("세모");
}
}
동그라미(Class)
public class 동그라미 implements 도형 {
@Override
public void 그리기() {
System.out.println("동그라미");
}
}
도형그리기 (Decorator, Class)
public class 도형그리기 implements 도형 {
protected 도형 도형;
public 도형그리기(도형 도형) {
this.도형 = 도형;
}
@Override
public void 그리기() {
도형.그리기();
}
}
도형꾸미기(Decorator, Class)
public class 도형꾸미기 extends 도형그리기{
public 도형꾸미기(도형 도형) {
super(도형);
}
@Override
public void 그리기() {
super.그리기();
색칠하기();
}
private void 색칠하기() {
System.out.println("색칠하기");
}
}
Main
public class Main {
public static void main(String[] args) {
도형꾸미기 도형 = new 도형꾸미기(new 세모());
도형.그리기();
}
}
세모
색칠하기
참조
'JAVA > DesignPattern' 카테고리의 다른 글
Design Pattern 디자인 패턴 Flyweight Pattern 플라이웨이트 패턴 (0) | 2021.12.19 |
---|---|
Design Pattern 디자인 패턴 Facade Pattern 파사드 패턴 (0) | 2021.12.18 |
Design Pattern 디자인 패턴 Composite Pattern 컴포지트 패턴 (0) | 2021.12.18 |
Design Pattern 디자인 패턴 Bridge Pattern 브릿지 패턴 (0) | 2021.12.16 |
Design Pattern 디자인패턴 Adapter Pattern 어답터 패턴 (0) | 2021.12.16 |