模式 / 行为模式
image

//ConcreteStrategy
class AddStrategy {
    doOperation(a, b) {
        return a + b;
    }
}

//ConcreteStrategy
class SubstractStrategy {
    doOperation(a, b) {
        return a - b;
    }
}

//Context
class Calc {
    constructor() {
        this.strategy = undefined;
    }

    execute(a, b) {
        if (this.strategy == undefined
            return 0;
        return this.strategy.doOperation(a, b);
    }

    setStrategy(sStrategy) {
        this.strategy = sStrategy;
    }
}

let calc = new Calc();
let result1 = calc.execute(53);
//result1 is 0

calc.setStrategy(new AddStrategy());
let result2 = calc.execute(53);
//result2 is 8

calc.setStrategy(new SubstractStrategy());
let result3 = calc.execute(53);
//result3 is 2

console.log(`result1 is ${result1}`);
console.log(`result2 is ${result2}`);
console.log(`result3 is ${result3}`);