/
builder.js
96 lines (82 loc) · 2.34 KB
/
builder.js
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
class HTTPRequest {
constructor() {
this.url = null;
this.method = 'GET'; // Default method
this.headers = {};
this.cookies = {};
this.data = null;
}
toString() {
return `HTTPRequest(${this.method} ${this.url}, Headers: ${JSON.stringify(this.headers)}, Cookies: ${JSON.stringify(this.cookies)}, Data: ${this.data})`;
}
send() {
console.log(`Sending request to ${this.url} using method ${this.method}`);
}
}
// Abstract class for a builder
class HTTPRequestBuilder {
constructor() {
if (this.constructor === HTTPRequestBuilder) {
throw new Error("Cannot instantiate abstract class!");
}
}
setURL(url) {
this.request.url = url;
return this;
}
setMethod(method) {
this.request.method = method;
return this;
}
setHeaders(headers) {
this.request.headers = headers;
return this;
}
setCookies(cookies) {
this.request.cookies = cookies;
return this;
}
setData(data) {
this.request.data = data;
return this;
}
build() {
return this.request;
}
}
// Concrete class for a GET request builder
class GetRequestBuilder extends HTTPRequestBuilder {
constructor() {
super();
this.request = new HTTPRequest();
this.request.method = 'GET';
}
}
// Concrete class for a POST request builder
class PostRequestBuilder extends HTTPRequestBuilder {
constructor() {
super();
this.request = new HTTPRequest();
this.request.method = 'POST';
}
}
// Director class to build requests (optional)
class RequestDirector {
constructor(builder) {
this.builder = builder;
}
construct(url, data = {}, headers = {}, cookies = {}) {
return this.builder
.setURL(url)
.setHeaders(headers)
.setCookies(cookies)
.setData(data)
.build();
}
}
// Usage
const director = new RequestDirector(new PostRequestBuilder());
// Prompts the user to enter data
const request = director.construct('http://example.com', { name: 'John Doe', age: 42 });
console.log(request.toString()); // HTTPRequest(POST http://example.com, Headers: {}, Cookies: {}, Data: {"name":"John Doe","age":42})
request.send(); // Sends the request to the server