Builder
by Artem
JavaScript
'use strict';
const CMS = {
WORDPRESS: 'Wordpress',
ALIFRESCO: 'Alifresco'
};
class Website {
setName(name) {
this.name = name;
}
setCms(cms) {
this.cms = cms;
}
setPrice(price) {
this.price = price;
}
}
class VisitCardWebsiteBuilder {
createWebsite() {
this.website = new Website();
}
buildName() {
this.website.setName('Visit Card');
}
buildCms() {
this.website.setCms(CMS.WORDPRESS);
}
buildPrice() {
this.website.setPrice(500);
}
getWebsite() {
return this.website;
}
}
class Director {
setBuilder(builder) {
this.builder = builder;
}
buildWebsite() {
this.builder.createWebsite();
this.builder.buildName();
this.builder.buildCms();
this.builder.buildPrice();
return this.builder.getWebsite()
}
}
// usage
const director = new Director();
director.setBuilder(new VisitCardWebsiteBuilder());
const website = director.buildWebsite();
console.log(website);