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 使用个人心得
Feb 26 Javascript
基于jQuery的让非HTML5浏览器支持placeholder属性的代码
May 24 Javascript
Tab切换组件(选项卡功能)实例代码
Nov 21 Javascript
判断浏览器的内核及版本号方法汇总
Jan 05 Javascript
功能强大的Bootstrap组件(结合js)
Aug 03 Javascript
JS正则RegExp.test()使用注意事项(不具有重复性)
Dec 28 Javascript
bootstrap 通过加减按钮实现输入框组功能
Nov 15 Javascript
vue组件实现可搜索下拉框扩展
Oct 23 Javascript
用WebStorm进行Angularjs 2开发(环境篇:Windows 10,Angular-cli方式)
Dec 05 Javascript
node express使用HTML模板的方法示例
Aug 22 Javascript
微信浏览器下拉黑边解决方案 wScroollFix
Jan 21 Javascript
Paypal支付不完全指北
Jun 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使用GeoIP库实例
2014/06/27 PHP
mod_php、FastCGI、PHP-FPM等PHP运行方式对比
2015/07/02 PHP
php基于双向循环队列实现历史记录的前进后退等功能
2015/08/08 PHP
Yii使用DeleteAll连表删除出现报错问题的解决方法
2016/07/14 PHP
PHP面向对象程序设计OOP继承用法入门示例
2016/12/27 PHP
Laravel 实现密码重置功能
2018/02/23 PHP
jQuery预加载图片常用方法
2015/06/15 Javascript
JavaScript位置与大小(1)之正确理解和运用与尺寸大小相关的DOM属性
2015/12/26 Javascript
基于javascript实现仿百度输入框自动匹配功能
2016/01/03 Javascript
基于javascript制作微信聊天面板
2020/08/09 Javascript
全国省市二级联动下拉菜单 js版
2016/05/10 Javascript
Js类的静态方法与实例方法区分及jQuery拓展的两种方法
2016/06/03 Javascript
深入理解JS DOM事件机制
2016/08/06 Javascript
jquery获取easyui日期控件的值实现方法
2016/11/09 Javascript
使用 Node.js 对文本内容分词和关键词抽取
2017/05/27 Javascript
vue2.0 父组件给子组件传递数据的方法
2018/01/15 Javascript
vue在手机中通过本机IP地址访问webApp的方法
2018/08/15 Javascript
vue+mousemove实现鼠标拖动功能(拖动过快失效问题解决方法)
2018/08/24 Javascript
详解vue3.0 diff算法的使用(超详细)
2020/07/01 Javascript
python基础教程之python消息摘要算法使用示例
2014/02/10 Python
Python实现删除Android工程中的冗余字符串
2015/01/19 Python
Python读取图片为16进制表示简单代码
2018/01/19 Python
python代码过长的换行方法
2018/07/19 Python
Python画图高斯分布的示例
2019/07/10 Python
在 Linux/Mac 下为Python函数添加超时时间的方法
2020/02/20 Python
HTML5利用约束验证API来检查表单的输入数据的代码实例
2016/12/20 HTML / CSS
Hotels.com中国区:好订网
2016/08/18 全球购物
英国性感内衣和睡衣品牌:Bluebella
2018/01/26 全球购物
班组安全员工作职责
2014/02/01 职场文书
社区居务公开实施方案
2014/03/27 职场文书
教师竞聘演讲稿
2014/05/16 职场文书
体育教育毕业生自荐信
2014/06/29 职场文书
2014年保卫科工作总结
2014/12/05 职场文书
创业计划书之溜冰场
2019/10/25 职场文书
Spring 使用注解开发
2022/05/20 Java/Android
Win10此设备不支持接收Miracast无法投影的解决方法
2022/07/07 数码科技