JavaScript设计模式(九):模版方法模式

模版方法模式:定义一个操作中算法的骨架(稳定),而将一些步骤延迟(变化)到子类。子类可(复用)其算法结构,也可重新定义该算法的特定步骤。

生活小栗子:

模式特点

  1. 抽象父类(封装子类算法框架,公共方法,执行顺序)
  2. 具体子类(继承父类算法结构,可重写父类方法)

抽象类不能被实例化,主要作用是为子类定义公共接口(抽象方法),由子类自行具体实行接口功能。

抽象方法被声明在抽象类中,并没有具体的实现。子类继承抽象类时,必须重写父类的抽象方法。

模版方法:封装子类的算法框架,指导子类方法执行顺序。

代码实现

借助TypeScript实现

JavaScript原型继承实现

  1. 使用原型继承来模拟类式继承,无编译器自动校验
  2. 其它方式接口检查
    • 鸭子类型模拟接口检查
      • 缺点:增加代码复杂性,额外与逻辑无关的判断代码
    • 抽象方法抛出异常,如果子类实现覆盖,则不会执行,否则抛出异常提醒
      • 优点:实现简单,缺点:得到错误信息时间靠后

JavaScript 非继承实现

高阶函数的实现

应用场景

  1. 搭建项目框架;
  2. UI组件构建

钩子方法(hook)增强个性化

优缺点

优点:封装变化提高系统扩展性的设计模式。子类可添加扩展,符合开发-封闭原则。
缺点:


参考文章

本文首发Github,期待Star!
https://github.com/ZengLingYong/blog

作者:以乐之名
本文原创,有不当的地方欢迎指出。转载请指明出处。

坚持原创技术分享,您的支持将鼓励我创作出的更好文章分享!