728x90
반응형
Decorator Pattern
기존 클래스는 유지하되, 이후 필요한 형태로 꾸밀 때 사용합니다. 객체의 결합을 통해 기능을 동적으로 유연하게 확장할 수 있습니다.
OCP와 DIP를 따릅니다.
Decorator Pattern Ex
커피 클래스
- 원두 종류: Etiopia, Kenya
- 커피 종류: Americano, Latte, Mocha, WhippingCream
원두 종류를 선택하고 커피 종류를 추가하여 새로운 커피를 만들 수 있습니다.
예를 들면 에티오피아 원두의 라떼, 케냐 원두의 모카에 휘핑크림을 올린다던지 확장하여 다양한 커피를 생성할 수 있습니다.
Coffee.java
package Java.decoratorPattern;
//추상 클래스로 커피 정의
public abstract class Coffee {
//커피를 내리는 메서드를 추상메서드로 설정
public abstract void brewing();
}
EtiopiaAmericano.java
package Java.decoratorPattern;
//커피를 상속한 에티오피아 원두의 커피
public class EtiopiaAmericano extends Coffee {
@Override
public void brewing() {
System.out.print("Etiopia Americano");
}
}
KenyaAmericano.java
package Java.decoratorPattern;
//커피를 상속한 케냐 원두의 커피
public class KenyaAmericano extends Coffee{
@Override
public void brewing() {
System.out.print("Kenya Americano");
}
}
Decorator.java
package Java.decoratorPattern;
public abstract class Decorator extends Coffee{
Coffee coffee;
public Decorator(Coffee coffee){
this.coffee = coffee;
}
@Override
public void brewing() {
coffee.brewing();
}
}
Latte.java
package Java.decoratorPattern;
public class Latte extends Decorator{
public Latte(Coffee coffee) {
super(coffee);
}
public void brewing() {
super.brewing();
System.out.print(" Adding Milk");
}
}
Mocha.java
package Java.decoratorPattern;
public class Mocha extends Decorator{
public Mocha(Coffee coffee) {
super(coffee);
}
public void brewing(){
super.brewing();
System.out.print(" Adding Mocha syrup");
}
}
WhippingCream.java
package Java.decoratorPattern;
public class WhippingCream extends Decorator{
public WhippingCream(Coffee coffee) {
super(coffee);
}
public void brewing(){
super.brewing();
System.out.println(" Adding Whipping Cream");
}
}
Main.java
package Java.decoratorPattern;
public class Main {
public static void main(String[] args) {
Coffee etiopiaCoffee = new EtiopiaAmericano();
etiopiaCoffee.brewing();
System.out.println();
//에티오피아 커피로 라떼 생성
Coffee etiopiaLatte = new Latte(etiopiaCoffee);
etiopiaLatte.brewing();
System.out.println();
//에티오피아 커피로 모카 생성
Coffee etiopiaMocha = new Mocha(etiopiaCoffee);
etiopiaMocha.brewing();
System.out.println();
//케냐 커피로 모카 생성하고 휘핑크림 올리기
Coffee kenyaCoffee = new WhippingCream(new Mocha(new Latte(new KenyaAmericano())));
kenyaCoffee.brewing();
}
}
결론
객체의 기능 확장을 유연하게 할 수 있는 Decorator Pattern에 대해서 알아보았습니다.
커피 객체를 예로 들어서 다양한 커피를 만들어보는 예제를 통해
Decorator Pattern을 이해할 수 있었습니다.
728x90
반응형
'JAVA' 카테고리의 다른 글
[Java] Priority Thread (0) | 2022.07.29 |
---|---|
[Java] Thread (0) | 2022.07.29 |
[Java] Template Method Pattern (0) | 2022.07.28 |
[Java] Singleton Pattern (0) | 2022.07.28 |
[Java] 자바 메서드가 생성되는 원리 - 가상 함수 기법 (0) | 2022.07.28 |