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 02 Javascript
jquery插件冲突(jquery.noconflict)解决方法分享
Mar 20 Javascript
JavaScript中document.forms[0]与getElementByName区别
Jan 21 Javascript
JavaScript开发Chrome浏览器扩展程序UI的教程
May 16 Javascript
JavaScript实战之带收放动画效果的导航菜单
Aug 16 Javascript
jQuery实现的图片轮播效果完整示例
Sep 12 Javascript
微信小程序 实现tabs选项卡效果实例代码
Oct 31 Javascript
JavaScript 数组的进化与性能分析
Sep 18 Javascript
JS和JQuery实现雪花飘落效果
Nov 30 jQuery
微信小程序按钮去除边框线分享页面功能
Aug 27 Javascript
使用FormData实现上传多个文件
Dec 04 Javascript
ES6中Promise的使用方法实例总结
Feb 18 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
虫族 Zerg 热键控制
2020/03/14 星际争霸
thinkphp在模型中自动完成session赋值示例代码
2014/09/09 PHP
jQuery validate 中文API 附validate.js中文api手册
2010/07/31 Javascript
Extjs EditorGridPanel中ComboBox列的显示问题
2011/07/04 Javascript
js特殊字符转义介绍
2013/11/05 Javascript
获取3个数组不重复的值的具体实现
2013/12/30 Javascript
超级简单的jquery操作表格方法
2014/12/15 Javascript
Bootstrap每天必学之进度条
2015/11/30 Javascript
基于JavaScript的操作系统你听说过吗?
2016/01/28 Javascript
Highcharts入门之简介
2016/08/02 Javascript
AngularJS  自定义指令详解及实例代码
2016/09/14 Javascript
JS调用Android、Ios原生控件
2017/01/06 Javascript
JavaScript中Promise的使用详解
2017/02/26 Javascript
AngularJS constant和value区别详解
2017/02/28 Javascript
基于Vue实现timepicker
2017/04/25 Javascript
Vue用v-for给循环标签自身属性添加属性值的方法
2018/10/18 Javascript
django使用channels2.x实现实时通讯
2018/11/28 Javascript
详解关于html,css,js三者的加载顺序问题
2019/04/10 Javascript
JS对象属性的检测与获取操作实例分析
2020/03/17 Javascript
解决vue-photo-preview 异步图片放大失效的问题
2020/07/29 Javascript
[05:49]2014DOTA2TI4正赛第二日综述 昔日冠军纷纷落马 VG LGD占尽先机
2014/07/20 DOTA
[01:12]快闪回顾DOTA2亚洲邀请赛(DAC) 静候2018新征程开启
2018/03/11 DOTA
Pandas之drop_duplicates:去除重复项方法
2018/04/18 Python
PyQt5多线程刷新界面防假死示例
2019/12/13 Python
基于python修改srt字幕的时间轴
2020/02/03 Python
详解Flask前后端分离项目案例
2020/07/24 Python
英国皇家邮政海外旗舰店:Royal Mail
2018/02/21 全球购物
单身联谊活动方案
2014/01/29 职场文书
双拥工作宣传标语
2014/06/26 职场文书
计算机科学与技术专业求职信
2014/09/03 职场文书
员工激励培训演讲稿
2014/09/16 职场文书
夫妻分居协议书范文
2014/11/26 职场文书
2014年减负工作总结
2014/12/10 职场文书
装饰施工员岗位职责
2015/04/11 职场文书
小学教师见习总结
2015/06/23 职场文书
html输入两个数实现加减乘除功能
2021/07/01 HTML / CSS