JavaScript设计模式之模板方法模式原理与用法示例


Posted in Javascript onAugust 07, 2018

本文实例讲述了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();

上述代码使用在线HTML/CSS/JavaScript代码运行工具http://tools.3water.com/code/HtmlJsRun测试运行结果:

JavaScript设计模式之模板方法模式原理与用法示例

更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
jQuery实现用方向键控制层的上下左右移动
Jan 13 Javascript
javascript实现禁止鼠标滚轮事件
Jul 24 Javascript
基于jquery实现轮播焦点图插件
Mar 31 Javascript
javascript之Array 数组对象详解
Jun 07 Javascript
jquery表单验证插件validation使用方法详解
Jan 20 Javascript
原生js更改css样式的两种方式
Mar 15 Javascript
Vue项目中引入外部文件的方法(css、js、less)
Jul 24 Javascript
解决使用vue.js路由后失效的问题
Mar 17 Javascript
vue返回上一页面时回到原先滚动的位置的方法
Dec 20 Javascript
javascript数组常见操作方法实例总结【连接、添加、删除、去重、排序等】
Jun 13 Javascript
vue element upload组件 file-list的动态绑定实现
Oct 11 Javascript
详解vue中v-model和v-bind绑定数据的异同
Aug 10 Javascript
opencv 识别微信登录验证滑动块位置
Aug 07 #Javascript
JavaScript设计模式之缓存代理模式原理与简单用法示例
Aug 07 #Javascript
深入浅析var,let,const的异同点
Aug 07 #Javascript
springMvc 前端用json的方式向后台传递对象数组方法
Aug 07 #Javascript
JS实现中英文混合文字溢出友好截取功能
Aug 06 #Javascript
JS实现图片上传多次上传同一张不生效的处理方法
Aug 06 #Javascript
JS插件clipboard.js实现一键复制粘贴功能
Dec 04 #Javascript
You might like
一个PHP模板,主要想体现一下思路
2006/12/25 PHP
非常实用的PHP常用函数汇总
2014/12/17 PHP
phpmyadmin提示The mbstring extension is missing的解决方法
2014/12/17 PHP
php smtp实现发送邮件功能
2017/06/22 PHP
PHP pthreads v3下同步处理synchronized用法示例
2020/02/21 PHP
JavaScript中的Location地址对象
2008/01/16 Javascript
jquery 定位input元素的几种方法小结
2013/07/28 Javascript
js正则表达exec与match的区别说明
2014/01/29 Javascript
如何设置一定时间内只能发送一次请求
2014/02/28 Javascript
js获取页面description的方法
2015/05/21 Javascript
简单分析javascript中的函数
2016/09/10 Javascript
详解vue的数据binding绑定原理
2017/04/12 Javascript
微信小程序 setData使用方法及常用错误解决办法
2017/05/11 Javascript
详解React之key的使用和实践
2018/09/29 Javascript
30分钟快速实现小程序语音识别功能
2018/11/27 Javascript
bootstrap table实现合并单元格效果
2018/12/24 Javascript
详解vue-cli3多页应用改造
2019/06/04 Javascript
使用React-Router实现前端路由鉴权的示例代码
2020/07/26 Javascript
关于element的表单组件整理笔记
2021/02/05 Javascript
[39:07]LGD vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.21
2018/08/22 DOTA
Python自定义类的数组排序实现代码
2016/08/28 Python
浅谈配置OpenCV3 + Python3的简易方法(macOS)
2018/04/02 Python
详解python列表(list)的使用技巧及高级操作
2019/08/15 Python
python3利用Axes3D库画3D模型图
2020/03/25 Python
Python任务调度利器之APScheduler详解
2020/04/02 Python
QT5 Designer 打不开的问题及解决方法
2020/08/20 Python
欧克利英国官网:Oakley英国
2019/08/24 全球购物
C#软件工程师英语面试题
2015/06/07 面试题
关于工资低的辞职信
2014/01/14 职场文书
2014村务公开实施方案
2014/02/25 职场文书
党建工作整改措施
2014/10/28 职场文书
起诉离婚协议书样本
2014/11/25 职场文书
优秀少先队员事迹材料
2014/12/24 职场文书
2016年母亲节寄语
2015/12/04 职场文书
党员学习中国梦心得体会
2016/01/05 职场文书
Go归并排序算法的实现方法
2022/04/06 Golang