class Beverage {
constructor({brewDrink, addCondiment}) {
this.brewDrink = brewDrink
this.addCondiment = addCondiment
}
/* 烧开水,共用方法 */
boilWater() { console.log('水已经煮沸=== 共用') }
/* 倒杯子里,共用方法 */
pourCup() { console.log('倒进杯子里===共用') }
/* 模板方法 */
init() {
this.boilWater()
this.brewDrink()
this.pourCup()
this.addCondiment()
}
}
/* 咖啡 */
const coffee = new Beverage({
/* 冲泡咖啡,覆盖抽象方法 */
brewDrink: function() { console.log('冲泡咖啡') },
/* 加调味品,覆盖抽象方法 */
addCondiment: function() { console.log('加点奶和糖') }
})
coffee.init()
// "水已经煮沸=== 共用"
// "冲泡咖啡"
// "倒进杯子里===共用"
// "加点奶和糖"
模板方法由兩部份結構組成,第一部份為抽象父類,第二部份是具體的實現子類。通常在抽象父類中風莊子類的算法框架,包括實現一些公共的方法和封裝子類中所有方法的執行順序。子類通過繼承抽象,也繼承整個算法結構,並且可以選擇重寫父類的方法