设计模式学习篇-策略模式

31 阅读1分钟

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));