在静态语言中,实现模板方法模式通过继承实现。通过抽象父类封装子类的算法框架——包括实现一些公共方法以及封装子类中所有的执行顺序。
JavaScript中实现模板算法模式
var Beverage = function( param ){
var boilWater = function(){
console.log('把水煮沸');
};
var brew = param.brew || function(){
throw new Error('必须传递brew方法');
};
var pourInCup = param.pourInCup || function(){
throw new Error('必须传递pourInCup方法');
};
var addCondiments = param.addCondiments || function(){
throw new Error('必须传递addCondiments方法');
};
var F = function(){};
F.prototype.init(){
boilWater();
brew();
pourInCup();
addCondiments();
};
return F;
}
var Coffee = Beverage({
brew: function(){
console.log('用沸水冲泡咖啡');
},
pourInCup: function(){
console.log('把咖啡倒进杯子');
},
addCondiments: function(){
console.log('加糖和牛奶');
}
});
var Tea = Beverage({
brew: function(){
console.log('用沸水浸泡茶叶');
},
pourInCup: function(){
console.log('把茶倒进杯子');
},
addCondiments: function(){
console.log('加柠檬');
}
});
var coffee = new Coffee();
coffee.init();
var tea = new Tea();
tea.init();
其中init()
方法为模板方法,其顺序执行具体对象的具体方法,实现了泛化。另模板方法模式也可以使用继承原型的方式实现
网友评论