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 Ajax文件上传(php)
Jun 16 Javascript
jQuery.autocomplete 支持中文输入(firefox)修正方法
Mar 10 Javascript
html+javascript实现可拖动可提交的弹出层对话框效果
Aug 05 Javascript
jQuery Animation实现CSS3动画示例介绍
Aug 14 Javascript
JS正则表达式大全(整理详细且实用)
Nov 14 Javascript
Javascript中设置默认参数值示例
Sep 11 Javascript
JavaScript实现Base64编码转换
Apr 23 Javascript
很实用的js选项卡切换效果
Aug 12 Javascript
react配合antd组件实现的管理系统示例代码
Apr 24 Javascript
为react组件库添加typescript类型提示的方法
Jun 15 Javascript
8个JS的reduce使用实例和reduce操作方式
Oct 05 Javascript
Vue.js中v-for指令的用法介绍
Mar 13 Vue.js
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编程开发“虚拟域名”系统
2006/10/09 PHP
PHP 学习路线与时间表
2010/02/21 PHP
关于PHP的curl开启问题探讨
2014/04/08 PHP
php猜单词游戏
2015/09/29 PHP
Laravel中10个有用的用法小结
2019/05/06 PHP
JavaScript Event学习第六章 事件的访问
2010/02/07 Javascript
使用JavaScript动态设置样式实现代码(2)
2013/01/25 Javascript
Jquery选中或取消radio示例
2013/09/29 Javascript
JavaScript简单实现鼠标拖动选择功能
2014/03/06 Javascript
jQuery控制的不同方向的滑动(向左、向右滑动等)
2014/07/18 Javascript
jQuery选择器querySelector的使用指南
2015/01/23 Javascript
js图片轮播手动切换效果
2015/11/10 Javascript
jQuery下拉菜单的实现代码
2016/11/03 Javascript
scroll事件实现监控滚动条并分页显示(zepto.js)
2016/12/18 Javascript
jquery+css实现下拉列表功能
2017/09/03 jQuery
vue-resouce设置请求头的三种方法
2017/09/12 Javascript
vue.js select下拉框绑定和取值方法
2018/03/03 Javascript
实例分析vue循环列表动态数据的处理方法
2018/09/28 Javascript
用Vue.js方法创建模板并使用多个模板合成
2019/06/28 Javascript
Vue 修改网站图标的方法
2020/12/31 Vue.js
[02:27]2014DOTA2国际邀请赛 VG赛后采访:更大的挑战在等着我们
2014/07/13 DOTA
[01:32]完美世界DOTA2联赛10月29日精彩集锦
2020/10/30 DOTA
python实现比较两段文本不同之处的方法
2015/05/30 Python
python实现简单socket通信的方法
2016/04/19 Python
Flask框架的学习指南之用户登录管理
2016/11/20 Python
Python使用Turtle模块绘制五星红旗代码示例
2017/12/11 Python
Python读取word文本操作详解
2018/01/22 Python
Opencv+Python实现图像运动模糊和高斯模糊的示例
2019/04/11 Python
《再别康桥》教学反思
2014/02/12 职场文书
模具毕业生推荐信
2014/02/15 职场文书
前处理组长岗位职责
2014/03/01 职场文书
优秀教师演讲稿
2014/05/06 职场文书
庆祝教师节演讲稿
2014/09/03 职场文书
房屋产权共有协议书范本
2014/11/03 职场文书
战友聚会致辞
2015/07/28 职场文书
vue中data改变后让视图同步更新的方法
2021/03/29 Vue.js