1. 概念
将每个算法封装起来,使它们可以互换使用。
2. 为什么使用
- 简单的说明一点,就是为了解决大量的if-else或者switch语句。减少代码判断,使得逻辑更加清晰
3. 举例说明
在做计算器功能时候对两个数的操作
interface Operator {
operator(a: number, b: number): number;
}
class Add implements Operator {
public operator(a: number, b: number): number {
return a + b;
}
}
class Sub implements Operator {
public operator(a: number, b: number): number {
return a - b;
}
}
class StrategyFactory {
private _opMap: Map<string, Operator> = new Map<string, Operator>();
constructor() {
this._opMap.set('+', new Add());
this._opMap.set('-', new Sub());
}
getStrategy(op: string): Operator {
return this._opMap.get(op);
}
execStrategy(op: string, a: number, b: number): number {
let operator = this.getStrategy(op);
if (!operator) {
console.warn('没有该操作符:' + op);
return;
}
return operator.operator(a, b);
}
}
let factory = new StrategyFactory();
console.log(factory.execStrategy('+', 1, 2));
console.log(factory.execStrategy('-', 1, 2));