@참고 자료
1. 디자인 패턴 목록
- Wikipedia <software design patterns> (영문)
2. 도서
3. 학습 사이트
- Inflearn 자바 디자인 패턴의 이해 (동영상)
- 삼실청년 블로그
- iluwatar's github (영문/GitHub)
4. 기타
- 자바 코어 라이브러리에서 자바 디자인 패턴이 구현된 사례
5. 고민해볼 것
- 필드값을 초기화 해주는 것과 초기화해주지 않는 것에 성능차이가 있을까?
@정리
@Facade 패턴
1. 소개
1) 설명: 특정 서비스를 구성하는 다수의 복잡한 API들을
하나의 간단한 API로 포장(wrapping)하여 제공해주는 객체(퍼샤드 객체)를 생성하고
클라이언트 코드가 이 객체를 통해 특정 서비스를 쉽게 사용할 수 있게 하는 패턴
2) 조건:
- 시스템의 API가 많아지고 복잡해질 때, 퍼샤드 패턴의 도입을 고려한다.
- 기존 시스템의 API는 변경하지 말고 그대로 유지한 채 별도의 퍼샤드 객체를 생성한다.
- 기존 시스템의 API는 퍼샤드 객체를 알지 못하며, 퍼샤드 객체에 대한 참조를 가지지 않는다.
3) 다이어그램:
4) 주요 학습 자료:
- CodeGeeks tutorial: Facade Pattern
- JournalDev tutorial: Facade Pattern
2. 구현 사례
- javax.faces.context.ExternalContext
- org.apache.catalina.connector.RequestFacade
@Builder 패턴
1. 소개
1) 설명: 생성의 책임을 별도의 클래스에 넘기도록 구현하는 방법(Builder클래스에서 Product를 생성한 뒤 반환하는 패턴)
열린생각 : 객체의 유효성 체크는 객체자체에서 해야 할까? 아니면 빌더객체에서 해야 할까?
빌더객체의 기본구성은 다음과 같다.
1. 빌더 객체 생성
BookBuilder.getInstance() { return new BookBuilder(); }
2. 객체 생성에 필요한 값 세팅
BookBuilder.setParameter(...) { ...; return this; }
3. 객체를 생성하여 반환
BookBuilder.build() { return new Book(...) }
*시간이 없어 정리하다 마무리를 못했습니다ㅠㅠ
제 블로그에 조금 더럽게 정리되었지만 정리된 내용이 있으니 참고하시면 좋을 것 같아요^^!
다솜 블로그 - 빌더패턴 정리한 내용
2) 다이어그램:
3) 주요 학습 자료:
- 이펙티브 자바 2판: 규칙 2<생성자 인자가 많을 때는 Builder 패턴 적용을 고려하라>
- 빌더 패턴에서 객체 유효성 검사는 어떻게 해야 하는가
2. 구현 사례
- com.google.common.graph.GraphBuilder
- org.springframework.beans.factory.support.BeanDefinitionBuilder
- org.springframework.messaging.support.MessageBuilder
- org.apache.ibatis.jdbc.SqlBuilder
- org.elasticsearch.common.cache.CacheBuilder
3. 다양한 구현 방법들
빌더 방식1
BookBuilder.build("a", "b", "c", ...){
return new Booke("a", "b", "c", ...);
}
빌더 방식2
BookBuilder.build(){
return new Book(this);
}
빌더 방식3
BookBuilder.build(){
Book book = new Book();
//로직
switch(type){
case 1: book.setAuthor("a"); break;
case 2: book.setAuthor("b"); break;
}
....
return book;}
빌더 방식4
BookBuilder{
static BookBuilder directed(){
return ... }
static BookBuilder undirected(){
return ...
}
build(){
return new 객체;
}
}
빌더 방식5
BookBuilder{
static BookBuilder rootBookBuilder(){
new BookBuilder();
new Book();
}
private BookBuilder{
}
}
빌더 방식6
// 객체 생성 방식이 두개
BookBuilder{
build(){
...
new Book();
}
// factory method
createBook(){
...
new Book();
}
}
@Singleton 패턴
1. 소개
- 설명:
- 다이어그램:
2. 구현 사례
-
'디자인 패턴' 카테고리의 다른 글
옵저버 패턴 Observer Pattern (390) | 2017.01.07 |
---|---|
프로토타입 패턴 (388) | 2016.12.24 |
싱글턴 패턴 (421) | 2016.12.10 |
Comments