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 相关文章推荐
jqPlot jquery的页面图表绘制工具
Jul 25 Javascript
JQuery中的ready函数冲突的解决方法
May 17 Javascript
jquery 多级下拉菜单核心代码
May 21 Javascript
js中的如何定位固定层的位置
Jun 15 Javascript
moment.js轻松实现获取当前日期是当年的第几周
Feb 05 Javascript
深入理解jQuery中的事件冒泡
May 24 Javascript
使用vue.js2.0 + ElementUI开发后台管理系统详细教程(一)
Jan 21 Javascript
利用pm2部署多个node.js项目的配置教程
Oct 22 Javascript
webpack4 处理SCSS的方法示例
Sep 03 Javascript
JS实现选项卡效果的代码实例
May 20 Javascript
vue的keep-alive用法技巧
Aug 15 Javascript
vue 路由meta 设置导航隐藏与显示功能的示例代码
Sep 04 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实现图片等比例放大和缩小的方法详解
2013/06/06 PHP
PHP版 汉字转码的实现详解
2013/06/09 PHP
使用PHP json_decode可能遇到的坑与解决方法
2017/08/03 PHP
基于php数组中的索引数组和关联数组详解
2018/03/12 PHP
基于PHP实现发微博动态代码实例
2020/12/11 PHP
ie focus bug 解决方法
2009/09/03 Javascript
NodeJS的模块写法入门(实例代码)
2012/03/07 NodeJs
JQuery boxy插件在IE中边角图片不显示问题的解决
2015/05/20 Javascript
javascript删除元素节点removeChild()用法实例
2015/05/26 Javascript
jQuery检查事件是否触发的方法
2015/06/26 Javascript
js将键值对字符串转为json字符串的方法
2018/03/30 Javascript
Vue源码探究之虚拟节点的实现
2019/04/17 Javascript
详解Vue源码中一些util函数
2019/04/24 Javascript
webpack是如何实现模块化加载的方法
2019/11/06 Javascript
JS实现拼图游戏
2021/01/29 Javascript
three.js 利用uv和ThreeBSP制作一个快递柜功能
2020/08/18 Javascript
浅谈JSON5解决了JSON的两大痛点
2020/12/14 Javascript
[45:38]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第一局
2016/03/02 DOTA
python去掉字符串中重复字符的方法
2014/02/27 Python
Python NumPy库安装使用笔记
2015/05/18 Python
python实现的简单FTP上传下载文件实例
2015/06/30 Python
Python RabbitMQ消息队列实现rpc
2018/05/30 Python
python实现事件驱动
2018/11/21 Python
Python正则匹配判断手机号是否合法的方法
2020/12/09 Python
python实现从本地摄像头和网络摄像头截取图片功能
2019/07/11 Python
平面设计师的工作职责
2013/11/21 职场文书
大学校园生活自我鉴定
2014/01/13 职场文书
农村党员一句话承诺
2014/05/30 职场文书
四风问题个人对照检查材料
2014/09/26 职场文书
党支部四风整改方案
2014/10/25 职场文书
工作表扬信范文
2015/01/17 职场文书
活动总结模板大全
2015/05/11 职场文书
学校教师培训工作总结
2015/10/14 职场文书
如何用JavaScript学习算法复杂度
2021/04/30 Javascript
Win11无法安装更新补丁KB3045316怎么办 附KB3045316补丁修复教程
2022/08/14 数码科技
Windows server 2016服务器基本设置
2022/08/14 Servers