JavaScript设计模式之模板方法模式原理与用法示例
作者:咕咚萝卜 发布时间:2024-02-24 02:17:20
标签:JavaScript,设计模式,模板方法模式
本文实例讲述了JavaScript设计模式之模板方法模式原理与用法。分享给大家供大家参考,具体如下:
一、模板方法模式:一种只需使用继承就可以实现的非常简单的模式。
二、模板方法模式由两部分组成,第一部分是抽象父类,第二部分是具体的实现子类。
三、以设计模式中的Coffee or Tea来说明模板方法模式:
1、模板Brverage,代码如下:
var Beverage = function(){};
Beverage.prototype.boilWater = function(){
console.log('把水煮沸');
};
Beverage.prototype.pourInCup = function(){
throw new Error( '子类必须重写pourInCup' );
};
Beverage.prototype.addCondiments = function(){
throw new Error( '子类必须重写addCondiments方法' );
};
Beverage.prototype.customerWantsConditions = function(){
return true; //默认需要调料
};
Beverage.prototype.init = function(){
this.boilWater();
this.brew();
this.pourInCup();
if(this.customerWantsCondiments()){
//如果挂钩返回true,则需要调料
this.addCondiments();
}
};
2、子类继承父类
var CoffeeWithHook = function(){};
CoffeeWithHook.prototype = new Beverage();
CoffeeWithHook.prototype.brew = function(){
console.log('把咖啡倒进杯子');
};
CoffeeWithHook.prototype.addCondiments = function(){
console.log('加糖和牛奶');
};
CoffeeWithHook.prototype.customerWantsCondiments = function(){
return window.confirm( '请问需要调料吗?' );
};
3、煮一杯咖啡
var coffeeWithHook = new CoffeeWithHook();
coffeeWithHook.init();
四、另一种写法
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 = function(){
boilWater();
brew();
pourInCup();
addCondiments();
};
return F;
};
var Coffee = Beverage({
brew: function(){
console.log( '用沸水冲泡咖啡' );
},
pourInCup: function(){
console.log('把咖啡倒进杯子');
},
addCondiments: function(){
console.log('加糖和牛奶');
}
});
var coffee = new Coffee();
coffee.init();
测试运行结果:
希望本文所述对大家JavaScript程序设计有所帮助。
来源:https://blog.csdn.net/joyksk/article/details/79853344
0
投稿
猜你喜欢
- 本文实例总结了Python实现判断一个字符串是否包含子串的方法。分享给大家供大家参考,具体如下:1.使用成员操作符 in>>&g
- 本文实例讲述了python实现京东订单推送到测试环境,提供便利操作。分享给大家供大家参考,具体如下:# -*- coding: utf-8
- 本文实例为大家分享了Python模拟用户登录验证的具体代码,供大家参考,具体内容如下1.功能简介此程序模拟用户登录验证的过程,实现用户名输入
- 微软在 Github 上开源了一个 Python 静态类型检查工具:pyright ,引起了社区内的多方关注。微软在开源项目上的参与力度是越
- 前言工作中,Git的使用越来越频繁。。除了最常用的clone,add,commit,push,pull等命令;还有回退命令reset。这一篇
- 这篇文章主要介绍了如何通过Django使用本地css/js文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,
- 本文实例讲述了Python实现通过文件路径获取文件hash值的方法。分享给大家供大家参考,具体如下:import hashlibimport
- 直接上代码图片就使用我家爽妹子的吧如果没有安装pil模块的话先cmd安装下输入:pip install pillow# -*- coding
- 目录查找算法 -- 简介顺序查找二分查找插值查找斐波那契查找树表查找1、二叉树查找算法。2、平衡查找树之2-3查找树(2-3 Tree)3、
- MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Redu
- Microsoft SQL Server 2000复制的概念:在数据库之间对数据和数据库对象进行复制和分发并进行同步以确保其一致性的一组技术
- 要在django项目中定期执行任务,比如每天一定的时间点抓取数据,刷新数据库等,可以参考stackoverflow的方法,先编写一个mana
- 以下摘录自 oreilly.JavaScript.The.Definitive.Guide.5th.Edition.Aug.200
- 字符串的相似性比较应用场合很多,像拼写纠错、文本去重、上下文相似性等。评价字符串相似度最常见的办法就是:把一个字符串通过插入、删除或替换这样
- 本文实例讲述了Python实现合并同一个文件夹下所有txt文件的方法。分享给大家供大家参考,具体如下:一、需求分析合并一个文件夹下所有txt
- 在现代LOGO设计当中,叶子的形状被视做好的创意。或者说,是一种变革的想法。在网页中他们大多被用于轻量级的解决方案、干净的不抽像的设计。在实
- 本文给大家介绍PHP中Http协议post请求参数,具体内容如下所示:WEB开发中信息基本全是在POST与GET请求与响应中进行,GET因其
- 支持向量机(Support Vector Machine, SVM)是一类按监督学习(supervised learning)方式对数据进行
- 根据SalesOrderID排序,取第16-18行这3条记录。方法一:(最常用的分页代码, top / not in)SELECT &nbs
- 这篇文章不谈大道理,只谈细节。关于facebook的大道理,大家可以去海内网的帖子《谁去救救麦田老师吧》讨论。那里有很多IT评论高手,谈的很