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();

热门相关:无量真仙   战神   最强装逼打脸系统   学霸女神超给力   重生之至尊千金