boilWater
的方法coffee
对象的 init
方法时,由于 coffee
对象和 Coffee
构造器的原型 prototype
上都没有对应的 init
方法,所以该请求会顺着原型链,被委托给 Coffee
的「父类」Beverage
原型上的 init
方法。Beverage.prototype.init
方法中已经规定好了泡饮料的顺序,所以我们能成功地泡出一杯咖啡, Tea
类基本如 coffee
类Beverage.prototype.init
。Beverage.prototype.init
被称为模板方法的原因是: 该方法中封装了子类的算法框架,它作为一个算法的模板,指导子类以何种顺序去执行哪些方法。在 Beverage.prototype.init
方法中, 算法内的每一个步骤都清楚地展示在我们眼前。Beverage
中封装了 饮料的冲泡顺序:Beverage
作为父类,已经规定好了冲泡饮料的 4 个步骤,那么有什么办法可以让子类不受这 个约束呢?customerWantsCondiments
来返回 true
「需要」/ false
「不需要」去控制调料的添加