728x90
데코레이터 패턴은 기존 뼈대(클래스)는 유지하되, 이후 필요한 형태로 꾸밀 때 사용한다. 확장이 필요한 경우 상속의 대안으로도 활용 한다. SOUD중에서 개방폐쇄 원칙(OCP)과 의존 역전 원칙(DIP)를 따른다.
ex)케이크
케이크에 초코를 바르면 초코케이크 가 되고 딸기를 넣으면 딸기 케이크가 된다. 이렇게
원본을 유지하되 어떤것을 씌우냐, 다른것을 첨가하느냐에 따라 다른 형태로 확장되는것을
데코레이터 패턴이라고 한다.
ICar(인터페이스)
package Muzi.decorator;
public interface ICar {
int getPrice();
void showPrice();
}
Audi(클래스) = ICar(상속)
package Muzi.decorator;
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(클래스) = ICar(상속)
package Muzi.decorator;
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(클래스) = AudiDecorator(상속)
package Muzi.decorator;
public class A3 extends AudiDecorator{
public A3(ICar audi, String modelName) {
super(audi, modelName, 1000);
}
}
A4(클래스) = AudiDecorator(상속)
package Muzi.decorator;
public class A4 extends AudiDecorator{
public A4(ICar audi, String modelName) {
super(audi, modelName, 2000);
}
}
A5(클래스) = AudiDecorator(상속)
package Muzi.decorator;
public class A5 extends AudiDecorator{
public A5(ICar audi, String modelName) {
super(audi, modelName, 3000);
}
}
Main(클래스)
package Muzi;
import Muzi.decorator.A3;
import Muzi.decorator.A4;
import Muzi.decorator.A5;
import Muzi.decorator.Audi;
import Muzi.decorator.ICar;
public class Main {
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();
}
}
콘솔에 보면
audi의 가격이 모델이 올라갈 때마다 1000원 씩 늘어난 것을 볼 수 있다.
이렇게 audi라는 기본 베이스를 두고
등급이 올라갈 때마다 가격을 +시키는 decorating을 했다.
이렇게 데코레이터 패턴을 통해서
뼈대는 건들지 않고 부가적인 첨가를 하면서
속성을 변환시키는 것을 데코레이터 패턴 이라고 한다.
'Spring > 디자인패턴' 카테고리의 다른 글
Facade Pattern(파사드 패턴) (0) | 2023.07.24 |
---|---|
ObserverPattern(옵저버 패턴) (0) | 2023.07.24 |
Proxy pattern(프록시 패턴) (0) | 2023.07.21 |
Adapter Pattern(어댑터 패턴) (0) | 2023.07.19 |
Singleton pattern(싱글톤 패턴) (0) | 2023.07.19 |