ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 데코레이터 패턴
    Java & 배경지식/패턴 2020. 2. 17. 20:40
    반응형

     

    데코레이션 테스트 구조

     

    public interface Car {
        public void assemble();
    }
    public class BasicCar implements Car {
        @Override
        public void assemble() {
            System.out.print("Basic Car.");
        }
    }
    public class CarDecorator implements Car {
        protected Car car;
        
        public CarDecorator(Car c){
            this.car=c;
        }
        
        @Override
        public void assemble() {
            this.car.assemble();
        }
    }
    public class LuxuryCar extends CarDecorator {
        public LuxuryCar(Car c) {
            super(c);
        }
        @Override
        public void assemble(){
            super.assemble();
            System.out.print(" Adding features of Luxury Car.");
        }
    }
    public class SportsCar extends CarDecorator {
        public SportsCar(Car c) {
            super(c);
        }
    
        @Override
        public void assemble(){
            super.assemble();
            System.out.print(" Adding features of Sports Car.");
        }
    }
    public class Test {
    
    	 public static void main(String[] args) {
    	        Car sportsCar = new SportsCar(new BasicCar());
    	        sportsCar.assemble();
    
    	        System.out.println("\n*****");
    			//방법 1
    	        Car sportsLuxuryCar = new LuxuryCar(new SportsCar(new BasicCar()));
                //방법 2
                Car sportsLuxuryCar = new SportsCar(new LuxuryCar(new BasicCar()));
    	        sportsLuxuryCar.assemble();
    
    	        System.out.println("\n*****");
    
    	        // 안되는 코드들
    //	        Car car = new LuxuryCar(new SportsCar());
    //	        Car car2 = new SportsCar(new LuxuryCar());
    	    }
    }

    위의 코드 결과

     

     

    데코레이터 패턴이란?

    • 타깃에 부가적인 기능을 런타임 시 다이내믹하게 부여해주기 위해서 프록시를 사용하는 패턴
      • 다이나믹이란
        • 컴파일 시점, 즉 코드상에서는 어떤 방법과 순서로 프록시와 타깃이 연결되어 사용되는지 정해져 있지 않다는 뜻
    • 프록시가 한개로 제한되지 않으며, 프록시가 직접 타깃을 사용하도록 고정시킬필요가 없다.
    • 인터페이스를 구현한 타켓과 여러개의 프록시를 사용 가능
    • 순서를 정해서 단계적으로 위힘하는 구조로 만들면 됨
    • 결과를 보게 된다면 기본차가  부품추가해서 스포츠카가되고, 럭셔리한 자동차가 된다. 이렇게 객체를 꾸며주는 것이 데코레이터 패턴이라한다.
    • 데코레이션은 순서에 상관없고, 꾸밀 속성을 가지는 기본 객체가 꼭 필요

     

    참고 

    https://meaownworld.tistory.com/91

    토비의 스프링

    반응형

    'Java & 배경지식 > 패턴' 카테고리의 다른 글

    프록시 패턴 - 백기선  (0) 2020.06.14
    프록시 패턴  (0) 2020.02.17
    Strategy Pattern(전략패턴)  (0) 2020.02.13
    Session Facade 패턴  (0) 2020.02.10
    Transfer Object 패턴(Value Object)  (0) 2020.02.10
Designed by Tistory.