반응형
Decorator Pattern
- 기존 뼈대(클래스)는 유지하되, 이후 필요한 형태로 꾸밀 때 사용한다.
- 확장이 필요한 경우 상속의 대안으로 활용한다.
- SOLID중에서 개방폐쇄 원칙(OCP)와 의존 역전 원칙(DIP)를 따른다.
ICar.java
public interface ICar {
int getPrice();
void showPrice();
}
Audi.java
public class Audi implements ICar {
private int price;
public Audi(int price) {
this.price = price;
}
@Override
public int getPrice() {
return price;
}
@Override
public void showPrice() {
System.out.println("audi 의 가격은 " + this.price + " 원 입니다.");
}
}
AudiDecorator.java
import com.example.demo.adapter.Airconditioner;
public class AudiDecorator implements ICar {
protected ICar audi;
protected String modelName;
protected int modelPrice;
public AudiDecorator(ICar audi, String modelName, int modelPrice) {
this.audi = audi;
this.modelName = modelName;
this.modelPrice = modelPrice;
}
@Override
public int getPrice() {
return audi.getPrice() + modelPrice;
}
@Override
public void showPrice() {
System.out.println(modelName + "의 가격은 " + getPrice() + " 원 입니다.");
}
}
A3.java
public class A3 extends AudiDecorator {
public A3(ICar audi, String modelName) {
super(audi, modelName, 1000);
}
}
A4.java
public class A4 extends AudiDecorator {
public A4(ICar audi, String modelName) {
super(audi, modelName, 2000);
}
}
A5.java
public class A5 extends AudiDecorator {
public A5(ICar audi, String modelName) {
super(audi, modelName, 3000);
}
}
DemoApplication.java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
ICar audi = new Audi(1000);
audi.showPrice();
//a3
ICar audi3 = new A3(audi, "A3");
audi3.showPrice();
//a4
ICar audi4 = new A4(audi, "A4");
audi4.showPrice();
//a5
ICar audi5 = new A5(audi, "A5");
audi5.showPrice();
}
}
반응형
'JAVA' 카테고리의 다른 글
[JAVA] 디자인 패턴 - Facade (0) | 2022.08.04 |
---|---|
[Java] 디자인 패턴 - Observer (0) | 2022.08.03 |
[JAVA] 디자인 패턴 - Proxy (0) | 2022.08.03 |
[JAVA] 디자인 패턴 - Singleton, Adapter (0) | 2022.08.02 |
[JAVA] 객체지향 설계 5원칙 SOLID (0) | 2022.08.02 |
댓글