模式 / 行为模式
image

interface IStrategy {
    doOperation(a: number, b: number): number
}

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

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

//Context
class Calc {
    private strategy: IStrategy = undefined

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

    setStrategy(strategy: IStrategy) {
        this.strategy = strategy
    }
}

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}`)