1. 데코레이터 패턴이란?
- 객체의 결합을 통해 기능을 동적으로 유연하게 확장할 수 있게 해주는 패턴
- 추가 기능의 조합을 설계하는 패턴
2. 데코레이터 패턴 예시
IPhone 시리즈 중 IPhoneSE는 500달러, IPhoneMini는 400달러라고 가정하자(또한 기본 시리즈를 iPhone이며, 이는 300달러라고 가정). 다음 예시는 Decorator 패턴을 통해 두 시리즈의 가격을 알려주는 예시이다.
Phone 인터페이스
public interface Phone {
public void showPrice();
}
IPhone 클래스
public class IPhone implements Phone {
public int price;
public IPhone(int price) { this.price = price; }
@Override
public void showPrice() {
System.out.println("iPhone: $" + this.price);
}
}
IPhone을 꾸며주는 IPhoneDecorator
public class IPhoneDecorator implements Phone {
public Phone iPhone;
public String name;
public int price;
public IPhoneDecorator(Phone iPhone, String name, int price) {
this.iPhone = iPhone;
this.name = name;
this.price = price;
}
@Override
public void showPrice() {
System.out.println(name + ": $" + this.price);
}
}
IPhoneDecorator를 상속받는 IPhoneSE, IPhoneMini 클래스
public class IPhoneSE extends IPhoneDecorator {
public IPhoneSE(Phone iPhone, String name) {
super(iPhone, name, 500);
}
}
public class IPhoneMini extends IPhoneDecorator {
public IPhoneMini(Phone iPhone, String name) {
super(iPhone, name, 400);
}
}
Main 클래스
public class Main {
public static void main(String[] args) {
Phone iPhone = new IPhone(300);
iPhone.showPrice();
// iPhoneSE
Phone iPhoneSE = new IPhoneSE(iPhone, "iPhoneSE");
iPhoneSE.showPrice();
// iPhoneMini
Phone iPhoneMini = new IPhoneMini(iPhone, "iPhoneMini");
iPhoneMini.showPrice();
}
}
// 출력
// iPhone: $300
// iPhoneSE: $500
// iPhoneMini: $400
'디자인 패턴 > 구조 패턴' 카테고리의 다른 글
프록시 패턴 (Proxy Pattern) (0) | 2021.08.28 |
---|---|
파사드 패턴 (Facade Pattern) (0) | 2021.08.27 |
어댑터 패턴 (Adapter Pattern) (0) | 2021.08.26 |