- 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()
您可能关注的文档
- 小学数学下长方体正方体.pdf
- 可能用到元器件datasheet晶汉达jhd162a.pdf
- 二章氧化还原反应学生版.pdf
- 未铝-02 gs8h32钢mt 08类型时间表标注描述alicap.pdf
- 报价单衬板铸业.pdf
- 河北邢台市2025-2026学年高二上学期2月期末语文试题(含解析).docx
- 河北邢台市2025-2026学年高一上学期2月期末物理试题(含解析).docx
- 第3课《安塞腰鼓》教学设计 2025-2026学年统编版语文八年级下册.docx
- 第1课《社戏》教学设计 2025-2026学年统编版语文八年级下册.docx
- 第2课《回延安》教学设计 2025-2026学年统编版语文八年级下册.docx
- 河北盐山中学等校2025-2026学年上学期高三一模化学试卷(含解析).docx
- 河北正定中学2025-2026学年高一上学期期末考试物理试卷(含解析).docx
- 河北张家口市怀安县2025-2026学年第一学期期末教学综合评价八年级地理试卷(含解析).docx
- 河南安阳市殷都区2025-2026学年第一学期期末教学质量检测七年级地理试卷(含解析).docx
- 河南安阳市滑县2025一2026学年第一学期期末学业质量监测八年级地理试题(含解析).docx
- 河南安阳市林州市2025-2026学年上学期期末考试高一政治试题(含解析).docx
- 河南焦作市武陟县第一中学2025-2026学年高一上学期1月月考语文试卷(含解析).docx
- 河南济源市2025-2026学年上学期期末学业质量调研七年级历史试卷(含解析).docx
- PICC导管并发症的紧急处理与护理.pptx
- 河南鹤壁市2025-2026学年高二上学期期末考试生物试题(含解析).docx
原创力文档

文档评论(0)