Sunny-117 / js-challenges

✨✨✨ Challenge your JavaScript programming limits step by step
https://juejin.cn/column/7244788137410560055
1.91k stars 232 forks source link

策略模式 #461

Open LittlebearHat opened 1 year ago

LittlebearHat commented 1 year ago

方案一:JS对象写法

let strategies = {
  add: function (num) {
    return num + num;
  },
  multiply: function (num) {
    return num * num;
  },
};
let calculateBonus = function (strategy, num) {
  return strategies[strategy](num);
};
console.log(calculateBonus("add", 3));
console.log(calculateBonus("multiply", 3));

方案二:传统写法

class Strategies {}
class Add extends Strategies {
  start(num) {
    return num + num;
  }
}
class Multiply extends Strategies {
  start(num) {
    return num * num;
  }
}
class Context {
  constructor(strategy) {
    this.strategy = strategy;
  }
  start(num) {
    return this.strategy.start(num);
  }
}
let context = new Context(new Add());
console.log(context.start(3));
context = new Context(new Multiply());
console.log(context.start(3));