JavaScript设计模式 -- 工厂模式
案例一:
function Cat(name, color) {
return {
name: name || 'cat',
color: color || 'black'
}
}
const cat1 = new Cat('kity', 'white')
const cat2 = new Cat()
案例二:
const BicycleShop = function () {}
BicycleShop.prototype = {
sellBicycle: function (model) {
const bicycle = this.createBicycle(model)
return bicycle
},
createBicycle: function(model) {
throw new Error('before use it, must be use keyword new')
}
}
const OracleBicycle = function () {}
inherits(OracleBicycle, BicycleShop)
OracleBicycle.prototype.createBicycle = function(model) {
let bicycle
switch(model) {
case 'speedster':
bicycle = new OracleSpeedster()
break
case 'lowrider':
bicycle = new OracleLowrider()
break
case 'Alien':
bicycle = new OracleAlien()
break
default:
bicy = new OracleComfortCruiser()
}
return bicycle
}
function OracleSpeedster() {
console.log('OracleSpeedster')
}
function OracleLowrider() {
console.log('OracleLowrider')
}
function OracleAlien() {
console.log('OracleAlien')
}
function OracleComfortCruiser() {
console.log('OracleComfortCruiser')
}
const IBMBicycleShop = function () {}
inherits(IBMBicycleShop, BicycleShop)
IBMBicycleShop.prototype.createBicycle = function(model) {
let bicycle
switch(model) {
case 'speedster':
bicycle = new IBMSpeedster()
break
case 'lowrider':
bicycle = new IBMLowrider()
break
case 'Alien':
bicycle = new IBMAlien()
break
default:
bicycle = new IBMComfortCruiser()
}
return bicycle
}
function IBMSpeedster() {
console.log('IBMSpeedster')
}
function IBMLowrider() {
console.log('IBMLowrider')
}
function IBMAlien() {
console.log('IBMAlien')
}
function IBMComfortCruiser() {
console.log('IBMComfortCruiser')
}
function inherits(child, base) {
child.prototype = Object.create(base.prototype)
}
const oracleShop = new OracleBicycle()
oracleShop.sellBicycle('speedster')
const ibmShop = new IBMBicycleShop()
ibmShop.sellBicycle('IBMAlien')

浙公网安备 33010602011771号