设计模式之模板方法.pdfVIP

  • 1
  • 0
  • 约2.46千字
  • 约 3页
  • 2025-04-28 发布于北京
  • 举报

深入理解JavaScript系列(41):设计模式之模板方法

2012-04-1309:04by大叔,3032阅读,8评论,收藏,编辑

介绍

模板方法(TemplateMethod)定义了一个操作中的算法的骨架,而将一些步骤延子

类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

模板方法是一种代码复用的基本技术,在类库中尤为重要,因为他们提取了类库中的公共

行为。模板方法导致一种反向的控制结构,这种结构就是中的“好莱坞法则”,即“别找

找我们,我们找你”,这指的是父类调用一个类的操作,而不是相反。具体体现是面向对象

编程编程语言里的抽象类(以及其中的抽象方法),以及继承该抽象类(和抽象方法)的

子类。

正文

举个例子,泡茶和泡咖啡有同样的步骤,比如烧开水(boilWater)、冲泡(brew)、倒

在里(pourOnCup),加小料(addCondiments)等等。但每种饮料冲泡的方法以及

所加的小料不一样,所以我们可以利用模板方法实现这个主要步骤。

首先先来定义抽象步骤:

varCaffeineBeverage=function(){

};

CaffeineBeverage.prototype.prepareRecipe=function(){

this.boilWater();

this.brew();

this.pourOnCup();

if(this.customerWantsCondiments()){

//如果可以想加小料,就加上

this.addCondiments();

}

};

CaffeineBeverage.prototype.boilWater=function(){

console.log(将水烧开!);

};

CaffeineBeverage.prototype.pourOnCup=function(){

console.log(将饮料到再里!);

};

CaffeineBeverage.prototype.brew=function(){

thrownewError(该方法必须重写!);

};

CaffeineBeverage.prototype.addCondiments=function(){

thrownewError(该方法必须重写!);

};

//默认加上小料

CaffeineBeverage.prototype.customerWantsCondiments=function(){

returntrue;

};

该函数在原型上扩展了所有的基础步骤,以及主要步骤,冲泡和加小料步骤没有实现,供

具体饮料所对应的函数来实现,另外是否加小料(customerWantsCondiments)默认返

回true,子函数重写的时候可以重写该值。

下面两个函数分别是冲咖啡和冲茶所对应的函数:

//冲咖啡

varCoffee=function(){

CaffeineBeverage.apply(this);

};

Coffee.prototype=newCaffeineBeverage();

Coffee.prototype.brew=function(){

console.log(从咖啡机想咖啡倒进去!);

};

Coffee.prototype.addCondiments=function(){

console.log(添加糖和牛奶);

};

Coffee.prototype.customerWantsCondiments=function(){

returnconfirm(你想添加糖和牛奶吗?);

};

//冲茶叶

varTea=function(){

CaffeineBeverage.apply(this);

};

Tea.prototype=newCaffeineBeverage();

Tea.prototype.brew=function()

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档