여러가지 디자인 패턴에 대해 정리해보고자 합니다.
두 번째로 빌더 패턴에 대해 작성해보겠습니다.
추상 팩토리의 확장 개념으로 좀 더 많은 빌드패턴이 있을 때 유용하게 사용합니다.
간단한 예제를 통해 이해해봅니다.
지난 예제에는 커피를 만들었다면 이번에는 좀 더 큰 커피가게를 만들어보겠습니다.
const makeShop = function(shopName) {
let coffeeTypes = [];
let employeeCount = 0;
return {
setCoffeeTypes = function(types) {
coffeeTypes = types;
return this;
},
setEmployeeCount = function(count) {
employeeCount = count;
return this;
},
build = function() {
return {
showName,
coffeeTypes,
employeeCount,
}
}
}
}
이제 우리는 다음과 같이 커피 가게를 찍어낼 수 있습니다.
const Starbucks = makeShop('Starbucks').setCoffeeTypes(['Ameracano', 'CafeLatte', 'ColdBrew']).setEmployeeCount(3).build();
const Pascucci = makeShop('Pascucci').setCoffeeTypes(['Ameracano', 'Yogurt']).setEmployeeCount(2).build();
한개의 함수를 통해 여러가지 가게를 손쉽게 찍어낼 수 있습니다.
여기서 아쉬운게 있습니다.
그것은 가게를 만들고 가게를 오픈하는 하는 기능을 만들고 싶습니다.
그래서 우리는 다음과 같이 수정할 수 있습니다.
const Shop = (function() {
function Shop(shopName, coffeeTypes, employeeCount) {
this.shopName = shopName;
this.coffeeTypes = coffeeTypes;
this.employeeCount = employeeCount;
}
Shop.prototype.open = function() {
console.log(`${this.coffeeTypes}의 종류를 판매중인 ${this.shopName}가게가 ${this.employeeCount}의 직원수로 오픈했습니다!`);
}
return Shop;
})
const makeShop = function(shopName) {
let coffeeTypes = [];
let employeeCount = 0;
return {
setCoffeeTypes = function(types) {
coffeeTypes = types;
return this;
},
setEmployeeCount = function(count) {
employeeCount = count;
return this;
},
build = function() {
return new Shop(showName, coffeeTypes, employeeCount);
}
}
}
위와같이 코드를 수정했습니다.
Starbucks.open(); // 'Ameracano', 'CafeLatte', 'ColdBrew'의 종류를 판매중인 Starbucks가게가 3의 직원수로 오픈했습니다!
기존 makeShop에서 가게에 메서드까지 추가됐다는것이 변경되었습니다.