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

+ Recent posts