首先澄清策略模式概念:
策略模式定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客
户。
HeadFirst设计模式中基于SimUDuck游戏介绍使用策略模式实现鸭子的飞行与叫声两个行为。通过为鸭子实现飞行方法进入主题,有的鸭子会飞,有的鸭子不会飞,具体的鸭子实现是通过继承自Duck基类实现,在基类中定义了鸭子飞行的行为,若子类鸭子中没有飞行行为,比如橡皮鸭,则需要再次实现飞行方法以覆盖父类中定义过得行为。又或者不同子类的鸭子飞行的方式不一样,则也需要单独在子类中重新覆盖父类的方法。而且,若日后鸭子的飞行行为发生了变化,则还需要在子类中逐个修改飞行方法,况且还不能再执行过程中动态改变鸭子的飞行行为。这样的实现非常不具有弹性,况且日后维护起来也比较麻烦。
为了消化策略模式,本文基于TypeScript演示策略模式的应用。
执行 tsc strategyModel.ts 生成对应的js文件;
执行 node strategyModel.js运行
abstract class FlyBehavior {
constructor() {}
abstract fly(): void;
}
class FlyHigher extends FlyBehavior {
constructor() {