class Circle {
constructor() {
this.shape = "circle"
}
}
class Rectangle {
constructor() {
this.shape = "rectangle"
}
}
class ShapeFactory {
constructor() {}
getShapeInstance(shapeType) {
try {
shapeType = shapeType[0].toUpperCase() + shapeType.substr(1).toLowerCase()
return eval(`new ${shapeType}()`)
} catch(err) {
return null
}
}
}
class Red {
constructor() {
this.color = 'red'
}
}
class Blue {
constructor() {
this.color = 'blue'
}
}
class ColorFactory {
getColorInstance(colorType) {
try {
colorType = colorType[0].toUpperCase() + colorType.substr(1).toLowerCase()
return eval(`new ${colorType}`)
} catch(err) {
return null
}
}
}
class AbstractFactory {
getFactory(factoryType) {
switch(factoryType.toUpperCase()) {
case 'COLORFACTORY':
return new ColorFactory()
case 'SHAPEFACTORY':
return new ShapeFactory()
default:
return null
}
}
}
let abstractFactory = new AbstractFactory()
let colorFactory = abstractFactory.getFactory('ColorFactory')
console.log(colorFactory.getColorInstance('circle'))