[Creational Pattern] 빌더 패턴 (Builder Pattern)
Design Pattern / Creational Pattern
빌더 패턴의 정의와 해당 디자인 패턴의 예제 코드를 통한 이해 및 설명 정리
개념
복잡한 객체의 생성 과정과 표현 방법을 분리하여 다양한 구성의 인스턴스를 만드는 생성 패턴
생성자에 들어갈 매개 변수를 메서드로 하나하나 받아들이고 마지막에 통합 빌드해서 객체를 생성하는 방식
예를 들면 수제 햄버거와 같은 느낌
패턴 구조
예제 코드
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
class Request {
constructor(defaultUrl) {
if (defaultUrl) {
this.defaultUrl = defaultUrl;
this.url = "";
this.method = "GET";
this.query = "";
this.method === "POST" ? (this.data = data) : null;
}
}
}
class RequestBuilder {
constructor(defaultUrl) {
this.request = new Request(defaultUrl);
}
setUrl(url) {
this.request.url = url;
return this;
}
setMethod(method) {
this.request.method = method;
return this;
}
setData(data) {
this.request.data = data;
return this;
}
setQuery(query) {
if (query) {
const querys = `?${query.map((res) => res)}`;
const requestQuery = querys.replaceAll(",", "&");
this.request.query = requestQuery;
}
return this;
}
build() {
const { request } = this;
request.requestUrl = `${request.defaultUrl}${request.url}${
request.query && request.query
}`;
return request;
}
}
module.exports = { RequestBuilder };
// https://rojy53nt54.execute-api.ap-northeast-2.amazonaws.com/Prod/
1
2
3
4
5
6
7
8
9
10
11
const { RequestBuilder } = require("./builder");
const request = new RequestBuilder(
"https://rojy53nt54.execute-api.ap-northeast-2.amazonaws.com/Prod"
)
.setMethod("GET")
.setUrl("/devices/wando02/sensors")
.setQuery(["size=1", "b_time=10", "a_time=100"])
.build();
console.log(request);
참고한 출처 사이트
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.