[디자인 패턴] 데코레이터 패턴 (Decorator Pattern)

최진민·2021년 11월 16일
0

디자인 패턴

목록 보기
8/10
post-thumbnail
  • 정의
  • 구현 예제

⛪️ 1. 데코레이터 패턴 ?

  • 데코레이터 패턴 (Decorator Pattern)

    • 객체 간의 결합을 통해 기능을 동적으로 유연하게 확장하도록 돕는 디자인 패턴

    • 즉, 기본 기능에 추가할 기능이 많아질 경우, Decorator 클래스로 정의하여 각 Decorator 객체들을 조합하여 추가 기능을 조합하여 설계하는 것

      • 구조

        • Component
          • ConcreteComponent : 기본 기능
          • Decorator : 추가 기능
          • 기본 기능추가 기능을 합친 공통 기능


💒 2. 구현 예제

  • 여러 종류의 자동차를 조립할 때의 예제를 살펴보자.

    • Component : Car
    • ConcreteComponent : BasicCar
    • Decorator : CarDeco
      • Bus
      • Taxi
  • Car

    public interface Car {
        void assemble();
    }
  • BasicCar

    public class BasicCar implements Car {
        @Override
        public void assemble() {
            System.out.println("기본 조립");
        }
    }
  • Decorator

    ublic class CarDeco implements Car {
        private Car car;
    
        public CarDeco(Car car) {
            this.car = car;
        }
    
        @Override
        public void assemble() {
            car.assemble();
        }
    }
    • Bus

      public class Bus extends CarDeco {
      
          public Bus(Car car) {
              super(car);
          }
      
          @Override
          public void assemble() {
              super.assemble();
              expand();
          }
      
          private void expand() {
              System.out.println("크기 확장");
          }
      }
    • Taxi

      public class Taxi extends CarDeco {
      
          public Taxi(Car car) {
              super(car);
          }
      
          @Override
          public void assemble() {
              super.assemble();
              putTaxiLight();
          }
      
          private void putTaxiLight() {
              System.out.println("택시 등 설치");
          }
      }
  • Main

    public class Main {
        public static void main(String[] args) {
            Bus bus = new Bus(new BasicCar());
            bus.assemble();
    
            System.out.println("++++++++++++");
            Taxi taxi = new Taxi(new BasicCar());
            taxi.assemble();
        }
    }
    
    print >>>
    기본 조립
    크기 확장
    ++++++++++++
    기본 조립
    택시 등 설치
  • 결론

    • 객체의 유연한 수정조합을 제공
    • 단점 : 필요에 따라 클래스가 많이 생성될 수 있다.
profile
열심히 해보자9999

0개의 댓글