프런트엔드/디자인 패턴

[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