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 相关文章推荐
slice函数的用法 之不错的应用
Dec 29 Javascript
javascript 出生日期和身份证判断大全
Nov 13 Javascript
jQuery 扩展对input的一些操作方法
Oct 30 Javascript
js 中 document.createEvent的用法
Aug 29 Javascript
基于jquery的内容循环滚动小模块(仿新浪微博未登录首页滚动微博显示)
Mar 28 Javascript
如何用js控制frame的隐藏或显示的解决办法
Mar 20 Javascript
原生javascript图片自动或手动切换示例附演示源码
Sep 04 Javascript
利用js实现在浏览器状态栏显示访问者在本页停留的时间
Dec 29 Javascript
jQuery中slice()方法用法实例
Jan 07 Javascript
JavaScript DOM进阶方法
Apr 13 Javascript
javascript变量声明实例分析
Apr 25 Javascript
Bootstrap 模态框(Modal)带参数传值实例
Aug 20 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中文乱码
2009/11/26 PHP
转换json格式的日期为Javascript对象的函数
2010/07/13 Javascript
jquery 选项卡效果 新手代码
2011/07/08 Javascript
关于jquery input textare 事件绑定及用法学习
2013/04/03 Javascript
Javascript验证用户输入URL地址是否为空及格式是否正确
2014/10/09 Javascript
javascript实现字符串反转的方法
2015/02/05 Javascript
jQuery判断数组是否包含了指定的元素
2015/03/10 Javascript
jquery.map()方法的使用详解
2015/07/09 Javascript
jQuery头像裁剪工具jcrop用法实例(附演示与demo源码下载)
2016/01/22 Javascript
AngularJS入门教程之AngularJS表达式
2016/04/18 Javascript
js创建数组的简单方法
2016/07/27 Javascript
浅谈JS函数定义方式的区别
2016/10/30 Javascript
jQuery Mobile漏洞会有跨站脚本攻击风险
2017/02/12 Javascript
vue移动端裁剪图片结合插件Cropper的使用实例代码
2017/07/10 Javascript
JavaScript解析任意形式的json树型结构展示
2017/07/23 Javascript
vue自定义过滤器创建和使用方法详解
2017/11/06 Javascript
vue-router 起步步骤详解
2019/03/26 Javascript
JS使用new操作符创建对象的方法分析
2019/05/30 Javascript
vant IndexBar实现的城市列表的示例代码
2019/11/20 Javascript
vue项目打包后提交到git上为什么没有dist这个文件的解决方法
2020/09/16 Javascript
在Vue中使用Select选择器拼接label的操作
2020/10/22 Javascript
在Python的Flask框架中使用日期和时间的教程
2015/04/21 Python
Python实现七彩蟒蛇绘制实例代码
2018/01/16 Python
基于python的多进程共享变量正确打开方式
2018/04/28 Python
Django 跨域请求处理的示例代码
2018/05/02 Python
Python3中内置类型bytes和str用法及byte和string之间各种编码转换 问题
2018/09/27 Python
Python 实现异步调用函数的示例讲解
2018/10/14 Python
自学python用什么系统好
2020/06/23 Python
双立人加拿大官网:Zwilling加拿大
2020/08/10 全球购物
2014国庆节餐厅促销活动策划方案
2014/09/16 职场文书
公司领导班子对照检查材料
2014/09/24 职场文书
爱国主义教育基地观后感
2015/06/18 职场文书
观后感格式
2015/06/19 职场文书
初一数学教学反思
2016/02/17 职场文书
立秋之描写立秋的作文(五年级)
2019/08/08 职场文书
Ruby使用Mysql2连接操作MySQL
2022/04/19 Ruby