프로그래밍 언어/JAVA(자바) 응용

68.데코레이터 패턴을 활용한 커피 머신 프로그램

lroot 2022. 6. 7. 09:41
728x90
반응형

Decorator Pattern

- 자바의 입출력 스트림은 decorator pattern 임

- 여러 decorator들을 활용하여 다양한 기능을 제공

- 상속보다 유연한 구현방식

- 데코레이터는 다른 데코레이터나 또는 컴포넌트를 포함해야 함

- 지속적인 기능의 추가와 제거가 용이함

- decorator와 component는 동일한 것이 아님 ( 기반 스트림 클래스가 직접 읽고 쓸 수 있음, 보조 스트림은 추가적인 기능 제공)

 

커피를 만들어보자

- Decorator Pattern을 활용하여 커피를 만들어 봅시다.

아메리카노

카페 라떼 = 아메리카노 + 우유

모카 커피 = 아메리카노 + 우유 + 모카시럽

크림 올라간 모카커피 = 아메리카노 + 우유 + 모카시럽 + whipping cream

커피는 컴포넌트고, 우유, 모카시럽, whipping cream은 모두 데코레이터임

 

예제

- Coffe.java

public abstract class Coffee {

public abstract void brewing(); 

}

- Decorator.java

public abstract class Decorator extends Coffee{

Coffee coffee;
public Decorator(Coffee coffee) {

this.coffee = coffee;
}

@Override
public void brewing() {

coffee.brewing();
}

}

- EtiopiaAmericano.java

public class EtiopiaAmericano extends Coffee{

@Override
public void brewing() {

System.out.println("Etiopia Americano");

}

}

- Latte.java

public class Latte extends Decorator{

 

public Latte(Coffee coffee) {

super(coffee);

 

}

 

@Override

public void brewing() {

super.brewing();

System.out.print("Adding Milk");

}

 

}

- Mocha.java

public class Mocha extends Decorator{

public Mocha(Coffee coffee) {
super(coffee);

}

@Override
public void brewing() {
super.brewing();
System.out.println("Adding Mocha Syrup");
}

}