데코레이터 패턴은 기본 기능에 추가될 수 있는 많은 수의 부가 기능 에 대해서 다양한 조합을 동적으로 구현할 수 있는 패턴이다.
어떤 자동차 판매회사에서 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;
}
}
'학교 공부' 카테고리의 다른 글
[디자인패턴] factory method 패턴 (0) | 2021.11.18 |
---|---|
[mySQL] mySQL Workbench import하기 (0) | 2021.10.06 |
[Spring] Dependency Injection(의존성 주입) 이란? (0) | 2021.10.06 |
[Spring] mysql 명령 프롬프트 (0) | 2021.10.05 |
설계패턴 6주차 실강- ocp만족하게 하기 (0) | 2021.09.27 |