建造者模式实现电脑的组装
首先如果你需要组装一台电脑,你会找到电脑商(指导者)
//指导者
class ComputerFactory {
constructor(computer) {
this.need = computer;
}
construct() {
console.log('开始建造');
if (this.need === 'OfficeComputer'){
let builder = new OfficeComputerBuilder();
let computer = builder.product();
return computer;
}else if(this.need === 'GameComputer'){
let builder = new GameComputerBuilder();
let computer = builder.product();
return computer;
}
}
}
电脑商会给你开个配置单,我们就可以找到配置单去具体组装
//抽象建造者
class ComputerBuilder {
constructor() {
}
product() {
}
}
//具体建造者1 officeComputerBuilder
class OfficeComputerBuilder extends ComputerBuilder {
constructor() {
super();
}
product() {
let computer = Object();
computer.Mainboard = '升技LG-95C 主板';
computer.Cpu = '英特尔赛扬';
computer.Memory = '三星 DDR2';
computer.Harddisk = '希捷 SATAII 接口台式机 80G硬盘';
computer.Videocard = '主板集成';
computer.show = function (){
console.log(`主板:${this.Videocard}, CPU: ${this.Cpu}, 内存: ${this.Memory}, 硬盘: ${this.Harddisk}, 显卡: ${this.Videocard}`);
}
return computer;
}
}
//具体建造者2 GameComputerBuilder
class GameComputerBuilder extends ComputerBuilder {
constructor() {
super();
}
product() {
let computer = Object();
computer.Mainboard = '技嘉CA-965P-DS3 主板';
computer.Cpu = '英特尔酷睿盒装';
computer.Memory = '芝奇 DDR2';
computer.Harddisk = '西数 SATAII 接口台式机 500G硬盘';
computer.Videocard = '七彩虹逸彩 GT-GD3 显卡';
computer.show = function (){
console.log(`主板:${this.Videocard}, CPU: ${this.Cpu}, 内存: ${this.Memory}, 硬盘: ${this.Harddisk}, 显卡: ${this.Videocard}`);
}
return computer;
}
}
最后只需要NEW出这些对象执行
let type = ['OfficeComputer','GameComputer']
// let production = new ComputerFactory(type[0]);
let production = new ComputerFactory(type[1]);
let computer = production.construct();
computer.show();
全部代码
//抽象建造者
class ComputerBuilder {
constructor() {
}
product() {
}
}
//具体建造者1 officeComputerBuilder
class OfficeComputerBuilder extends ComputerBuilder {
constructor() {
super();
}
product() {
let computer = Object();
computer.Mainboard = '升技LG-95C 主板';
computer.Cpu = '英特尔赛扬';
computer.Memory = '三星 DDR2';
computer.Harddisk = '希捷 SATAII 接口台式机 80G硬盘';
computer.Videocard = '主板集成';
computer.show = function (){
console.log(`主板:${this.Videocard}, CPU: ${this.Cpu}, 内存: ${this.Memory}, 硬盘: ${this.Harddisk}, 显卡: ${this.Videocard}`);
}
return computer;
}
}
//具体建造者2 GameComputerBuilder
class GameComputerBuilder extends ComputerBuilder {
constructor() {
super();
}
product() {
let computer = Object();
computer.Mainboard = '技嘉CA-965P-DS3 主板';
computer.Cpu = '英特尔酷睿盒装';
computer.Memory = '芝奇 DDR2';
computer.Harddisk = '西数 SATAII 接口台式机 500G硬盘';
computer.Videocard = '七彩虹逸彩 GT-GD3 显卡';
computer.show = function (){
console.log(`主板:${this.Videocard}, CPU: ${this.Cpu}, 内存: ${this.Memory}, 硬盘: ${this.Harddisk}, 显卡: ${this.Videocard}`);
}
return computer;
}
}
//指导者
class ComputerFactory {
constructor(computer) {
this.need = computer;
}
construct() {
console.log('开始建造');
if (this.need === 'OfficeComputer'){
let builder = new OfficeComputerBuilder();
let computer = builder.product();
return computer;
}else if(this.need === 'GameComputer'){
let builder = new GameComputerBuilder();
let computer = builder.product();
return computer;
}
}
}
let type = ['OfficeComputer','GameComputer']
// let production = new ComputerFactory(type[0]);
let production = new ComputerFactory(type[1]);
let computer = production.construct();
computer.show();