JAVA

[JAVA] 디자인 패턴 - Decorator

P.젤리비 2022. 8. 3.
반응형

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

댓글

💲 추천 글