JAVA

[JAVA] 데코레이터 패턴

집한구석 2021. 12. 10. 22:41
728x90

데코레이터 패턴 정의

  • 기능을 동적으로 유연하게 확장할 수 있게 해주는 패턴
  • 추가 기능을 Decorator 클래스로 정의한 후 조합함으로써 추가기능 조합을 설계하는 패턴 
  • 용도에 따라 객체의 기능을 계속 추가(데코레이트) 할 수 있게 해줌

데코레이터 패턴 특징

  • 객체에 동적으로 기능을 추가할 수 있게 해줌
  • 기능이 많아질수록 데코레이터 클래스들이 계속 추가 되어야 하기 때문에 클래스가 많아져서 복잡성이 높아짐
  • 겹겹으로 애워싸기 때문에 객체의 정체를 알기가 힘듬

데코레이터 패턴 용도

  • 요소들을 계속 수정하면서 사용하는 구조 인 경우
  • 오소들을 조합해서 사용하는 경우

데코레이터 예시

public interface Box {
    void wrap();
}

public class GiftBox implements Box {

    @Override
    public void wrap() {
        System.out.println("선물박스 포장");
    }
}

public class GiftBoxDecorator implements Box {

    private Box box;

    public GiftBoxDecorator(Box box) {
        this.box = box;
    }

    @Override
    public void wrap() {
        box.wrap();
    }
}

public class FoodBoxDecorator extends GiftBoxDecorator {

    public FoodBoxDecorator(Box box) {
        super(box);
    }

    @Override
    public void wrap() {
        super.wrap();
        System.out.print("푸드박스 포장");
    }
}

public class Main {

    public static void main(String[] args) {
        Box box = new GiftBox();
        FoodBoxDecorator foodBoxDecorator = new FoodBoxDecorator(box);
        foodBoxDecorator.wrap();
    }
}
  • 필드에 Box를 생성자를 통하여 값을 넘겨받으면서 데코레이터를 이어 붙여서 정의함 

'JAVA' 카테고리의 다른 글

[JAVA] 제네릭  (0) 2021.12.15
[JAVA] 리플렉션  (0) 2021.12.12
[JAVA] 프록시패턴  (0) 2021.12.09
[JAVA] ThreadLocal  (0) 2021.12.03
[JAVA] 템플릿 메소드 패턴  (0) 2021.11.29