프런트엔드/디자인 패턴
[2일차] 빌더 | 생성 패턴 5일만에 끝내기 챌린지 - GoF 디자인 패턴
조드래곤나인
2023. 7. 16. 14:41

출처: 에릭 감마 , 리처드 헬름 , 랄프 존슨 , 존 블리시디스. 『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