반응형
데코레이터 패턴에 대한 자세한 설명은 다음 글을 참고하세요. Decorator Pattern(데코레이터 패턴)
데코레이터 패턴의 예시: 도형 그리기
구현하려는 로직
-Shape 인터페이스와 Shape 인터페이스를 구현하는 구체적인 클래스들을 만듭니다.
-Shape 인터페이스를 구현하고 Shape 객체를 인스턴스 변수로 갖는 추상 데코레이터 클래스 ShapeDecorator를 만듭니다.
-RedShapeDecorator는 ShapeDecorator를 구현하는 구체적인 클래스입니다.
-demo class인 DecoratorPatternDemo는 Shape 객체를 장식하기 위해 RedShapeDecorator를 사용합니다.
구현 단계
[1단계]
인터페이스를 만듭니다.
//Shape.java
public interface Shape {
void draw();
}
[2단계]
동일한 인터페이스를 구현하는 구체적인 클래스들을 만듭니다.
//Rectangle.java
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Shape: Rectangle");
}
}
//Circle.java
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("Shape: Circle");
}
}
[3단계]
Shape 인터페이스를 구현하는 추상 데코레이터 클래스를 만듭니다.
//ShapeDecorator.java
public abstract class ShapeDecorator implements Shape {
protected Shape decoratedShape;
public ShapeDecorator(Shape decoratedShape){
this.decoratedShape = decoratedShape;
}
public void draw(){
decoratedShape.draw();
}
}
[4단계]
ShapeDecorator 클래스를 확장하는 구체적인 데코레이터 클래스를 만듭니다.
//RedShapeDecorator.java
public class RedShapeDecorator extends ShapeDecorator {
public RedShapeDecorator(Shape decoratedShape) {
super(decoratedShape);
}
@Override
public void draw() {
decoratedShape.draw();
setRedBorder(decoratedShape);
}
private void setRedBorder(Shape decoratedShape){
System.out.println("Border Color: Red");
}
}
[5단계]
RedShapeDecorator를 사용하여 Shape 객체를 장식합니다.
//DecoratorPatternDemo.java
public class DecoratorPatternDemo {
public static void main(String[] args) {
Shape circle = new Circle();
Shape redCircle = new RedShapeDecorator(new Circle());
Shape redRectangle = new RedShapeDecorator(new Rectangle());
System.out.println("Circle with normal border");
circle.draw();
System.out.println("\nCircle of red border");
redCircle.draw();
System.out.println("\nRectangle of red border");
redRectangle.draw();
}
}
[6단계]
출력 확인
Circle with normal border
Shape: Circle
Circle of red border
Shape: Circle
Border Color: Red
Rectangle of red border
Shape: Rectangle
Border Color: Red
반응형
'Spring > additional' 카테고리의 다른 글
[Spring] 스프링 삼각형1_IoC/DI (0) | 2021.02.28 |
---|---|
[Spring] 스프링을 통한 의존성 주입 (0) | 2021.02.28 |
[디자인 패턴] Proxy Pattern(프록시 패턴) (0) | 2021.02.21 |
[디자인 패턴] Adapter Pattern(어댑터 패턴) (0) | 2021.02.21 |
[Spring]스프링이 사랑한 디자인 패턴3 (0) | 2021.02.21 |