模版方法模式:定义一个操作中算法的骨架(稳定),而将一些步骤延迟(变化)到子类。子类可(复用)其算法结构,也可重新定义该算法的特定步骤。
生活小栗子:
模式特点
- 抽象父类(封装子类算法框架,公共方法,执行顺序)
- 具体子类(继承父类算法结构,可重写父类方法)
抽象类不能被实例化,主要作用是为子类定义公共接口(抽象方法),由子类自行具体实行接口功能。
抽象方法被声明在抽象类中,并没有具体的实现。子类继承抽象类时,必须重写父类的抽象方法。
模版方法:封装子类的算法框架,指导子类方法执行顺序。
代码实现
借助TypeScript实现
JavaScript原型继承实现
- 使用原型继承来模拟类式继承,无编译器自动校验
- 其它方式接口检查
- 鸭子类型模拟接口检查
- 缺点:增加代码复杂性,额外与逻辑无关的判断代码
- 抽象方法抛出异常,如果子类实现覆盖,则不会执行,否则抛出异常提醒
- 优点:实现简单,缺点:得到错误信息时间靠后
- 鸭子类型模拟接口检查
JavaScript 非继承实现
高阶函数的实现
应用场景
- 搭建项目框架;
- UI组件构建
钩子方法(hook)增强个性化
优缺点
优点:封装变化提高系统扩展性的设计模式。子类可添加扩展,符合开发-封闭原则。
缺点:
参考文章
本文首发Github,期待Star!
https://github.com/ZengLingYong/blog
作者:以乐之名
本文原创,有不当的地方欢迎指出。转载请指明出处。