js设计模式学习笔记(十三):模板方法模式

200 阅读2分钟

模板方法模式

特点

  • 多个有序行为,进行整合,对外提供一个调用,来进行一串行为的调用。
  • 类似于 react 的 类组件 对应的 生命周期 以及 render 函数

介绍

  • 严格需要继承来实现的设计模式,依赖于抽象类对子类方法的执行顺序的控制。

  • 是一种为子类提供实现某种特定业务的算法框架,严格要求子类实现具体步骤的设计模式。

  • 模版方式模式:为子类提供算法框架,简单可以理解成,有很多行为步骤相近类似的业务过程,

    • 我们将他们的流程进行抽象规定好流程的各必须步骤,然后提供将各步骤联系在一起的算法,或者说是计算、执行顺序。
  • JS 中,在没有严格的类继承的体制下,没办法保证子对象一定实现了抽象对象中的每一个方法,很可会有漏写的函数。这是 JS 对于模版方式的一个潜在隐患。

  • 捕获隐患:

    • 1.在 java 中,如果继承一个抽象类,在编译时会要求将每一个抽象方法都进行实现,否则编译就不能通过。
    • 2.执行前判断子类中是否实现了这个方法
    • 3.执行时若子类没有执行,在抽象类中对应方法直接将异常抛出,进而提示。

demo

更多详细代码


var Beverage = function () {};
Beverage.prototype.boilwater = function () {
  console.log("将水烧开");
};

Beverage.prototype.brew = function () {
  throw new Error("子类必须实现该方法");
};

Beverage.prototype.pourIncup = function () {
  throw new Error("子类必须实现该方法");
};

Beverage.prototype.addCondiments = function () {
  throw new Error("子类必须实现该方法");
};

Beverage.prototype.init = function () {
  this.boilwater();
  this.brew();
  this.pourIncup();
  this.addCondiments();
};

var Coffee = function () {};
Coffee.prototype = new Beverage();

Coffee.prototype.brew = function () {
  console.log("用沸水冲泡咖啡");
};

Coffee.prototype.pourIncup = function () {
  console.log("把咖啡倒进杯子");
};

Coffee.prototype.addCondiments = function () {
  console.log("加糖和牛奶");
};

var coffee = new Coffee();

coffee.init();