디자인패턴 5. Decorator Pattern

min seung moon·2021년 6월 25일
0

Spring

목록 보기
10/50

1. Decorator Pattern

  • Decorator Pattern은 기존 뼈대(클래스)는 유지하되, 이후 필요한 형태로 꾸밀 때 사용한다. 확장이 필요한 경우 상속의 대한으로도 활용한다. SOLID중에서 개방폐쇄 원칙(OCP)과 의존 역전 원칙(DIP)를 따른다
  • 예로, 에스프레소(뼈대, 원액)가 있다면, 물을 첨가하면 아메리카노, 우유가 들어가면 카페라떼 등으로 형태가 변한다

2. 프로젝트 테스트

  • Package : decorator
  • Interface : ICar
  • Class : Audi, AudiDecorator, A3, A4, A5
  • ICar.java
package com.company.design.decorator;

public interface ICar {
    int getPrice();
    void showPrice();
}
  • Audi.java
package com.company.design.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("auid의 가격은 "+this.price+"원 입니다.");
    }
}
  • Main.java
package com.company.design;

import com.company.design.decorator.*;

public class Main {

    public static void main(String[] args) {
        ICar audi = new Audi(1000);
        audi.showPrice();
    }
}

  • AudiDecorator.java
package com.company.design.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.java
package com.company.design.decorator;

public class A3 extends AudiDecorator{

    public A3(ICar audi, String modelName) {
        super(audi, modelName, 1000);
    }
}
  • A4.java
package com.company.design.decorator;

public class A4 extends AudiDecorator{

    public A4(ICar audi, String modelName) {
        super(audi, modelName, 2000);
    }
}
  • A5.java
package com.company.design.decorator;

public class A5 extends AudiDecorator{
    public A5(ICar audi, String modelName) {
        super(audi, modelName, 3000);
    }
}
  • Main.java
package com.company.design;

import com.company.design.decorator.*;

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();
    }
}

profile
아직까지는 코린이!

0개의 댓글