js里的模板方法模式
模板方法模式
模板方法模式的定义:在一个方法里定义算法的骨架,将一些步骤延迟到其子类。
意思是用一个方法包装多个函数的调用,这个方法就是模板,函数的使用只需要跟着模板里的步骤进行即可,同时根据情况可以放入钩子函数来选择是否在指定位置执行函数。
算是JS的继承的一个主要用法。
//! 这就是冲饮料的模板
function makeBevenage(bevenage) {
bevenage.boilWater();
bevenage.brew();
bevenage.pourInCup();
bevenage.addCondiments();
}
//! 可以写成类的模式来继承
class Bevenage {
constructor() {
this.isAddCondiments = true;
}
make() {
this.boilWater();
this.brew();
this.pourInCup();
if (this.isAddCondiments) {
this.addCondiments(); //* 这就是一个钩子
}
}
boilWater() {
throw "该函数必须被继承";
}
brew() {
throw "该函数必须被继承";
}
pourInCup() {
throw "该函数必须被继承";
}
addCondiments() {
throw "该函数必须被继承";
}
}
//! 茶叶类
class Tea extends Bevenage {
constructor(isAddCondiments) {
super();
this.isAddCondiments = isAddCondiments;
}
boilWater() {
console.log("烧水");
}
brew() {
console.log("泡茶叶");
}
pourInCup() {
console.log("倒进杯子");
}
addCondiments() {
console.log("加调味品");
}
}
//! 咖啡类
class Coffee extends Bevenage {
constructor(isAddCondiments) {
super();
this.isAddCondiments = isAddCondiments;
}
boilWater() {
console.log("烧水");
}
brew() {
console.log("泡咖啡");
}
pourInCup() {
console.log("倒进杯子");
}
addCondiments() {
console.log("加调味品");
}
}
new Coffee(false).make();