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 相关文章推荐
javascript中加var和不加var的区别 你真的懂吗
Jan 06 Javascript
温习Javascript基础语法之词法结构
May 31 Javascript
ion content 滚动到底部会遮住一部分视图的快速解决方法
Sep 06 Javascript
js文件中直接alert()中文出来的是乱码的解决方法
Nov 01 Javascript
浅谈原生JS实现jQuery的animate()动画示例
Mar 08 Javascript
jQuery实现表格奇偶行显示不同背景色 就这么简单
Mar 13 Javascript
JavaScript设计模式之单例模式详解
Jun 09 Javascript
详谈vue+webpack解决css引用图片打包后找不到资源文件的问题
Mar 06 Javascript
vue v-model实现自定义样式多选与单选功能
Jul 05 Javascript
React 项目迁移 Webpack Babel7的实现
Sep 12 Javascript
vue中实现高德定位功能
Dec 03 Javascript
Javascript实现关闭广告效果
Jan 29 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/03/27 PHP
PHP简单实现HTTP和HTTPS跨域共享session解决办法
2015/05/27 PHP
什么是OneThink oneThink后台添加插件步骤
2016/04/13 PHP
微信支付开发告警通知实例
2016/07/12 PHP
javascript 继承实现方法
2009/08/26 Javascript
jquery 锁定弹出层实现代码
2010/02/23 Javascript
javascript奇异的arguments分析
2010/10/20 Javascript
javascript 图片裁剪技巧解读
2012/11/15 Javascript
JavaScript中双叹号(!!)作用示例介绍
2014/04/10 Javascript
JavaScript实现的一个日期格式化函数分享
2014/12/06 Javascript
javascript实现倒计时(精确到秒)
2015/06/26 Javascript
JS简单实现多级Select联动菜单效果代码
2015/09/06 Javascript
ionic由于使用了header和subheader导致被遮挡的问题的两种解决方法
2016/09/22 Javascript
Node.js websocket使用socket.io库实现实时聊天室
2017/02/20 Javascript
从零开始学习Node.js系列教程六:EventEmitter发送和接收事件的方法示例
2017/04/13 Javascript
vue.js2.0 实现better-scroll的滚动效果实例详解
2018/08/13 Javascript
微信小程序实现侧边栏分类
2019/10/21 Javascript
JavaScript利用键盘码控制div移动
2020/03/19 Javascript
剖析Python的Twisted框架的核心特性
2016/05/25 Python
django定期执行任务(实例讲解)
2017/11/03 Python
python 计算数组中每个数字出现多少次--“Bucket”桶的思想
2017/12/19 Python
django之使用celery-把耗时程序放到celery里面执行的方法
2019/07/12 Python
python numpy中cumsum的用法详解
2019/10/17 Python
挪威手表购物网站:Klokker
2016/09/19 全球购物
Avène雅漾美国官方网站:敏感肌肤护理专家
2016/10/24 全球购物
美国球鞋寄卖网站:Stadium Goods
2018/05/09 全球购物
MIKI HOUSE美国官方网上商店:日本领先的婴儿和儿童高级时装品牌
2020/06/21 全球购物
教师自我鉴定
2013/12/13 职场文书
工业自动化毕业生自荐信范文
2014/01/04 职场文书
干部行政关系介绍信
2014/01/17 职场文书
酒店员工检讨书
2014/02/18 职场文书
学校关爱留守儿童活动方案
2014/08/27 职场文书
乡镇镇长个人整改措施
2014/10/01 职场文书
人身损害赔偿协议书格式
2014/11/01 职场文书
中学生自我评价范文
2015/03/03 职场文书
反邪教学习心得体会
2016/01/15 职场文书