模板方法模式
特点
- 多个有序行为,进行整合,对外提供一个调用,来进行一串行为的调用。
- 类似于 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();