
출처: 에릭 감마 , 리처드 헬름 , 랄프 존슨 , 존 블리시디스. 『Gof의 디자인 패턴』. 김정아(역). 프로텍미디어, 2015.
[2일차] 빌더(builder)
생성 패턴 5일만에 끝내기 챌린지 - GoF 디자인 패턴
타입스크립트로 설명하는 GoF 디자인 패턴의 생성 패턴 5일만에 끝내기 챌린지
빌더란?
복잡한 객체를 생성하는 방법과 표현하는 방법을
정의하는 클래스를 별도로 분리하여,
서로 다른 표현이라도 이를 생성할 수 있는 동일한 절차를 제공할 수 있도록 합니다.
활용성
1) 합성할 객체들의 표현이 서로 다르더라도
생성 절차에서 이를 지원해야 할 때
2) 복합 객체의 생성 알고리즘이
이를 합성하는 요소 객체들의 조립 방법에 독립적일 때
구조 및 구현
interface Builder {
buildPart1(): void
buildPart2(): void
}
class ConcreteBuilder implements Builder {
private product = new Product()
buildPart1() {
this.product.setState1(10)
}
buildPart2() {
this.product.setState2(20)
}
getResult() {
return this.product
}
}
class Product {
private state1: number = 0
private state2: number = 0
setState1(state1: number) {
this.state1 = state1
}
setState2(state2: number) {
this.state2 = state2
}
}
class Director {
private builder: Builder
constructor (builder: Builder) {
this.builder = builder
}
construct() {
this.builder.buildPart1()
this.builder.buildPart2()
}
}
class Main {
constructor() {
const builder = new ConcreteBuilder()
const director = new Director(builder)
director.construct()
builder.getResult()
}
}
사용자는 Director객체를 생성하고,
이렇게 생성한 객체를 자신이 원하는 Builder객체로 합성해 나간다.
제품의 일부가 구축될 때마다 Director는 Builder에 통보한다.
Builder는 Director의 요청을 처리하여 제품에 부품을 추가한다.
사용자는 Builder에서 제품을 요청한다.
728x90
'프런트엔드 > 디자인 패턴' 카테고리의 다른 글
[4일차] 프로토타입 | 생성 패턴 5일만에 끝내기 챌린지 - GoF 디자인 패턴 (0) | 2023.07.16 |
---|---|
[3일차] 팩토리 메서드 | 생성 패턴 5일만에 끝내기 챌린지 - GoF 디자인 패턴 (0) | 2023.07.16 |
[1일차] 추상 팩토리 | 생성 패턴 5일만에 끝내기 챌린지 - GoF 디자인 패턴 (0) | 2023.07.16 |
[0일차] 생성 패턴 5일만에 끝내기 챌린지 - GoF 디자인 패턴 (0) | 2023.07.16 |
GoF 디자인 패턴 한장에 정리! (0) | 2023.07.11 |