
//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(5, 3);
//result1 is 0
calc.setStrategy(new AddStrategy());
let result2 = calc.execute(5, 3);
//result2 is 8
calc.setStrategy(new SubstractStrategy());
let result3 = calc.execute(5, 3);
//result3 is 2
console.log(`result1 is ${result1}`);
console.log(`result2 is ${result2}`);
console.log(`result3 is ${result3}`);
| Определяет семейство алгоритмов, инкапсулируя их и позволяя подставлять один вместо другого. Можно менять алгоритм независимо от клиента, который им пользуется. |