// 运算基类
class Operate {
constructor(numA, numB) {
this.numA = numA;
this.numB = numB;
}
getResult() {
throw new Error('getResult需要重写')
}
}
// 加法类
class Add extends Operate {
constructor(numA, numB) {
super(numA, numB)
}
getResult() {
return this.numA + this.numB
}
}
// 加法类
class Division extends Operate {
constructor(numA, numB) {
super(numA, numB)
}
getResult() {
return this.numA / this.numB
}
}
// 乘法类
class Mul extends Operate {
constructor(numA, numB) {
super(numA, numB)
}
getResult() {
return this.numA * this.numB
}
}
// 减法类
class Sub extends Operate {
constructor(numA, numB) {
super(numA, numB)
}
getResult() {
return this.numA - this.numB
}
}
// 工厂类 生成对应的运算工厂类
class Factory {
static map = {Add, Division, Mul, Sub }
static getOperate=(type = 'Add', numA = 0, numB = 0) => new Factory.map[type](numA, numB)
}
console.log(Factory.getOperate('Add', 1, 2).getResult())//3
console.log(Factory.getOperate('Mul', 1, 2).getResult())//2
console.log(Factory.getOperate('Sub', 1, 2).getResult())//-1
console.log(Factory.getOperate('Division', 1, 2).getResult())//0.5
console