본문 바로가기

프로그래밍/자바 디자인 패턴

자바 디자인 패턴 튜토리얼 - 구조 설계 패턴 - 데코레이터 패턴

반응형

데코레이터 패턴은 구조를 연결하지 않고 기존의 객체에 새로운 기능을 추가합니다.

기존 클래스에 대한 래퍼 역할을하는 구조 패턴입니다.

데코레이터 패턴은 데코레이터 클래스를 작성하여 원래 클래스를 래핑하고 추가 기능을 제공합니다.

예제


interface Printer {
   void print();
}
class PaperPrinter implements Printer {
   @Override
   public void print() {
      System.out.println("Paper Printer");
   }
}
class PlasticPrinter implements Printer {
   @Override
   public void print() {
      System.out.println("Plastic Printer");
   }
}
abstract class PrinterDecorator implements Printer {
   protected Printer decoratedPrinter;
   public PrinterDecorator(Printer d){
      this.decoratedPrinter = d;
   }
   public void print(){
      decoratedPrinter.print();
   }  
}
class Printer3D extends PrinterDecorator {
   public Printer3D(Printer decoratedShape) {
      super(decoratedShape);    
   }
   @Override
   public void print() {
     System.out.println("3D.");
     decoratedPrinter.print();         
   }
}
public class Main {
   public static void main(String[] args) {
      Printer plasticPrinter = new PlasticPrinter();
      Printer plastic3DPrinter = new Printer3D(new PlasticPrinter());
      Printer paper3DPrinter = new Printer3D(new PaperPrinter());
      plasticPrinter.print();
      plastic3DPrinter.print();
      paper3DPrinter.print();
   }
}



위의 코드는 다음 결과를 출력합니다


Plastic Printer
3D.
Plastic Printer
3D.
Paper Printer
반응형