// 빌더패턴
const User = class {
constructor(build) {
if(build) {
this.id = build.id;
this.name = build.name;
this.age = build.age;
}
}
static get Builder() {
class Builder {
setId(id) {
this.id = id;
return this;
}
setName(name) {
this.name = name;
return this;
}
setAge(age) {
this.age = age;
return this;
}
build() {
return new User(this);
}
}
return new Builder();
}
}
const builder = User.Builder;
const user1 = builder
.setId(1)
.setName('Alice')
.setAge(22)
.build();
dd(user1, 'user1');
const user2 = builder
.setId(2)
.setName('boy')
.setAge(33)
.build();
dd(user2, 'user2');
상속을 이용한 빌더패턴
// 상속을 이용한 빌더패턴
const Builder = class {
init() {
Object.keys(this).forEach((key) => {
const setterName = `set${key.substr(0, 1).toUpperCase()}${key.substr(1)}`;
this[setterName] = value => {
this[key] = value;
return this;
};
});
}
build() {
return this;
}
};
const User = class extends Builder {
constructor() {
super();
this.id = -1;
this.name = null;
this.age = 0;
super.init();
}
}
const user3 = new User()
.setId(1)
.setName('json')
.setAge(22)
.build();
dd(user3, 'user3');
dd(user3.name, 'user3.name')
const user4 = new User()
.setId(2)
.setName('park')
.setAge(33)
.build();
dd(user4, 'user4');
dd(user4.name, 'user4.name')
'프로그래밍 > Js' 카테고리의 다른 글
es6 옵셔널 체이닝 에 대해 ?. 샘플 OCP (0) | 2023.08.31 |
---|---|
es6 if문 제거 (0) | 2023.08.24 |
vite vue3 오프라인에서 작업시 OS 플랫폼 별로 build 되는 현상 (0) | 2023.07.13 |
vite 와 vue3 빌드후 dist/assets/*.js 많이 나오는것을 필요한 js 만 나오게 (0) | 2023.07.10 |
[vite] 번들러 vite 사용시 터미널에서 build 방법 (0) | 2023.07.07 |