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的实现回车键Enter切换焦点
Sep 14 Javascript
举例讲解AngularJS中的模块
Jun 17 Javascript
JavaScript中的this,call,apply使用及区别详解
Jan 29 Javascript
js中遍历Map对象的方法
Jul 27 Javascript
JavaScript实现form表单的多文件上传
Mar 27 Javascript
javascript实现Java中的Map对象功能的实例详解
Aug 21 Javascript
Angular Material Icon使用详解
Nov 07 Javascript
微信小程序获取位置展示地图并标注信息的实例代码
Sep 01 Javascript
angular inputNumber指令输入框只能输入数字的实现
Dec 03 Javascript
JS eval代码快速解密实例解析
Apr 23 Javascript
Vue3.0的优化总结
Oct 16 Javascript
vant自定义二级菜单操作
Nov 02 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中使用模板的方法
2008/05/24 PHP
深入PHP操作MongoDB的技术总结
2013/06/02 PHP
生成随机字符串和验证码的类的PHP实例
2013/12/24 PHP
php中debug_backtrace、debug_print_backtrace和匿名函数用法实例
2014/12/01 PHP
通过JAVASCRIPT读取ASP设定的COOKIE
2007/02/15 Javascript
学习YUI.Ext第七日-View&JSONView Part Two-一个画室网站的案例
2007/03/10 Javascript
利用Dojo和JSON建立无限级AJAX动态加载的功能模块树
2007/03/24 Javascript
jQuery经过一段时间自动隐藏指定元素的方法
2015/03/17 Javascript
好好了解一下Cookie(强烈推荐)
2016/06/14 Javascript
ECMAScript6轮播图实践知识总结
2016/08/17 Javascript
jquery实现文字单行横移或翻转(上下、左右跳转)
2017/01/08 Javascript
分享一个精简的vue.js 图片lazyload插件实例
2017/03/13 Javascript
详解vue 配合vue-resource调用接口获取数据
2017/06/22 Javascript
Vue如何实现响应式系统
2018/07/11 Javascript
对VUE中的对象添加属性
2018/09/18 Javascript
TypeScript基础入门教程之三重斜线指令详解
2018/10/22 Javascript
在Vue中获取自定义属性方法:data-id的实例
2020/09/09 Javascript
vue v-for 点击当前行,获取当前行数据及event当前事件对象的操作
2020/09/10 Javascript
多个Vue项目部署到服务器的步骤记录
2020/10/22 Javascript
[10:28]2018DOTA2国际邀请赛寻真——VGJ.S寻梦之路
2018/08/15 DOTA
Python实现识别手写数字 简易图片存储管理系统
2018/01/29 Python
Python发送http请求解析返回json的实例
2018/03/26 Python
Python实现求解括号匹配问题的方法
2018/04/17 Python
python try 异常处理(史上最全)
2019/03/07 Python
python中操作文件的模块的方法总结
2021/02/04 Python
澳大利亚家居用品零售商:Harris Scarfe
2020/10/10 全球购物
阿尔卡特(中国)的面试题目
2014/08/20 面试题
乔迁之喜主持词
2014/03/27 职场文书
让生命充满爱演讲稿
2014/05/10 职场文书
党员群众路线自我剖析材料
2014/10/06 职场文书
重阳节标语大全
2014/10/07 职场文书
战友聚会致辞
2015/07/28 职场文书
2015年教师节广播稿
2015/08/19 职场文书
2016年3月份红领巾广播稿
2015/12/21 职场文书
准备去美国留学,那么大学申请文书应该怎么写?
2019/08/12 职场文书
Linux磁盘管理方法介绍
2022/06/01 Servers