학교 공부
[디자인패턴] 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;
}
}
반응형