티스토리 뷰
이번에 알아볼 패턴은 Decorator Pattern(데코레이터 패턴)이다. 구현법이 데코레이터 패턴과 비슷한 패턴들이 몇 존재하므로 구현법으로 구분하려하지말고 목적이 뭔지 잘 파악하는게 중요할듯 하다.
데코레이터 패턴은 전략 패턴(Strategy Pattern)과 마찬가지로 합성(Composite)을 이용하는 패턴이다. 내부적으로 실제 비즈니스로직을 처리하는 객체를 인스턴스변수로 갖고있으면서 해당 비즈니스로직의 처리 결과값을 자신의 이름이 말하든 한번 더 가공해주는 패턴이다.
소스로 확인해보자.
//놀이공원 인터페이스 처음엔 A, B였는데 예제도 진화하고있다...
interface AmusementPark {
public int getTicketCost(); //티켓 값을 반환하는 추상메서드
}
//놀이공원 인터페이스를 구현한 디즈니랜드 클래스
class DisneyLand implements AmusementPark {
@Override
public int getTicketCost(){
return 10000; //티켓 값은 10000원
}
}
영업 잘하고있었는데 평일 이용객이 너무 적은것같다. 월요일은 20% 할인을 하기로한다.
class MondayDecorator implements AmusementPark {
AmusementPark park;
public MondayDecorator(AmusementPark park){
this.park = park;
}
@Override
public int getTicketCost(){
return (int)park.getTicketCost() * 0.8;
}
}
public class Test {
public static void main(String[] arg){
AmusementPark park = new DisneyLand();
System.out.println("Ticket Cost => " + park.getTicketCost());
park = new MondayDecorator(park);
System.out.println("Ticket Cost => " + park.getTicketCost());
}
}
카드사와 제휴를 통해 할인도 하게됐다. 월요일할인과 중복할인이 적용된다.
class CardDecorator implements AmusementPark {
AmusementPark park;
public CardDecorator(AmusementPark park){
this.park = park;
}
@Override
public int getTicketCost(){
return (int)park.getTicketCost() * 0.9;
}
}
public class Test {
public static void main(String[] arg){
AmusementPark park = new DisneyLand();
System.out.println("Ticket Cost => " + park.getTicketCost());
park = new MondayDecorator(park);
System.out.println("Ticket Cost => " + park.getTicketCost());
park = new CardDecorator(park);
System.out.println("Ticket Cost => " + park.getTicketCost());
}
}
월요일 할인 20% 를 받고 제휴카드 10% 할인까지 받았다.
이런식으로 실제 비즈니스 로직을 처리하는 객체를 인스턴스 멤버로 사용하고 메서드 요청이 들어오면 해당 객체가 처리한 로직에 적절한 가공을 해서 반환해주는게 데코레이터 패턴이다.
'Java' 카테고리의 다른 글
자바8 용어정리 (1) | 2016.09.19 |
---|---|
Generics (7) | 2016.05.29 |
DesignPattern#03 Template Callback Pattern (0) | 2016.03.04 |
DesignPattern#02 Template Method Pattern (0) | 2016.03.02 |
DesignPattern#01 Strategy Pattern (0) | 2016.03.01 |
- Total
- Today
- Yesterday
- 정규표현식
- java8
- servlet
- DesignPattern
- generics
- mariadb
- Spring
- http
- go-core
- java
- Design Pattern
- javascript
- JavaScript Core
- clean code
- TEST
- frontcode
- EffectiveJava
- spring cloud
- programming
- MySQL
- code
- toby
- Jackson
- backend개발환경
- Git
- db
- OOP
- JPA
- Kotlin
- frontend개발환경
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |