Skip to content

设计模式 - 策略模式

js
/**
 * 策略模式的定义:
 * 定义一系列的算法, 把他们封装起来,并且他们之间可以相互替换
 * 核心:将算法的使用 和 算法的实现 分离开来
*/

// 方法一
class PS {
    calc(salary) {
        return salary * 4
    }
}
class PA {
    calc(salary) {
        return salary * 3
    }
}
class PB {
    calc(salary) {
        return salary * 2
    }
}

class Bouns {
    constructor() {
        this.salary = null
        this.strategy = null
    }
    setSalary(salary) {
        this.salary = salary
    }
    setStrategy(strategy) {
        this.strategy = strategy
    }
    getBouns(){
        return this.strategy.calc(this.salary)
    }
}
let bouns = new Bouns()
bouns.setSalary(10000)
bouns.setStrategy(new PS())
console.log('方法一:', bouns.getBouns())

// 方法二
let strategies = {
    'S': function (salary) {
        return salary * 4
    },
    'A': function (salary) {
        return salary * 3
    },
    'B': function (salary) {
        return salary * 2
    }
}

let getBouns = function (level, salary) {
    return strategies[level](salary)
}
console.log('方法二:', getBouns('S', 10000))