학교 공부

[디자인패턴] decorator 패턴

연듀 2021. 11. 2. 15:36

 

 

데코레이터 패턴은 기본 기능에 추가될 수 있는 많은 수의 부가 기능  에 대해서 다양한 조합을 동적으로 구현할 수 있는 패턴이다.

 

 

어떤 자동차 판매회사에서 Hansung의 자동차를 팔고 여기에 옵션(ACC, TPMS ..)을 추가 할 때

추가된 옵션을 고려하여 자동차의 가격 계산을 용이하게 만들 수 있게 하려고 한다.

 

->decorator 패턴을 사용

 

 

 

Car.java

public abstract class Car {
    public abstract int cost();
}

 

 

CarDecorator.java

public abstract class CarDecorator extends Car{
    private Car decoratedCar;

    public CarDecorator(Car decoratedCar) {
        this.decoratedCar = decoratedCar;
    }

    public int cost() {
        return decoratedCar.cost();
    }
}

Main.js

public class Main {
    public static void main(String[] args) {
        Car myCar = new Hansung();
        Car myCarWithTpms = new TPMS(myCar);
        Car myCarWithTpmsAcc = new ACC(myCarWithTpms);
        System.out.println(myCarWithTpmsAcc.cost());

        Car myCar1 = new ACC(new TPMS(new Hansung()));
        System.out.println(myCar1.cost());
    }

}
// 한성 자동차 2천만원, TPMS 백만원, ACC 300만원 => 24000000원

TPMS.java

public class TPMS extends CarDecorator{
    public TPMS(Car decoratedCar){
        super(decoratedCar);
    }

    public int cost(){
        return super.cost()+1000000;
    }
}

ACC.java

public class ACC extends CarDecorator{
    public ACC(Car decoratedCar){
        super(decoratedCar);
    }

    public int cost(){
        return super.cost()+3000000;
    }
}

Hansung.java

public class Hansung extends Car{
    @java.lang.Override
    public int cost() {
        return 20000000;
    }
}