node.js实现的装饰者模式示例


Posted in Javascript onSeptember 06, 2017

本文实例讲述了node.js实现的装饰者模式。分享给大家供大家参考,具体如下:

装饰者模式的实现更强调类的组合而不是通过继承。这样可以增强灵活性。在node.js 中,可以通过call函数实现。call函数可以在一个对象中调用另一个类的成员函数,从这种意义上达成类的组合目的。

var util = require('util');
var Beverage = function(){
  var description = "Unkown Beverage"
  this.getDescription = function(){
    return description;
  }
}
function Espresso(){
  Beverage.call(this);
  this.description = "Espresso";
}
util.inherits(Espresso, Beverage);
Espresso.prototype.cost = function(){
  return 1.99;
}
function HouseBlend(){
  Beverage.call(this);
  this.description = "House Blend Coffee";
}
util.inherits(HouseBlend, Beverage);
HouseBlend.prototype.cost = function(){
  return .89;
}
function Mocha(beverage){
  this.beverage = beverage;
};
Mocha.prototype.getDescription = function(){
  return this.beverage.getDescription() + ", Mocha";
}
Mocha.prototype.cost = function(){
  return 0.20 + this.beverage.cost();
}
function Whip(beverage){
  this.beverage = beverage;
};
Whip.prototype.getDescription = function(){
  return this.beverage.getDescription() + ", Whip";
}
Whip.prototype.cost = function(){
  return 0.40 + this.beverage.cost();
}
var beverage = new Espresso();
console.log(beverage.getDescription() + " $" + beverage.cost());
var beverage2 = new HouseBlend();
beverage2 = new Mocha(beverage2);
beverage2 = new Mocha(beverage2);
beverage2 = new Whip(beverage2);
console.log(beverage2.getDescription() + " $" + beverage2.cost());

希望本文所述对大家node.js程序设计有所帮助。

Javascript 相关文章推荐
关于JavaScript的gzip静态压缩方法
Jan 05 Javascript
jquery Firefox3.5中操作select的问题
Jul 10 Javascript
加载 Javascript 最佳实践
Oct 30 Javascript
js弹出对话框方式小结
Nov 17 Javascript
微信小程序去哪里找 小程序到底如何使用(附小程序名单)
Jan 09 Javascript
深入理解vue.js中的v-if和v-show
Jun 22 Javascript
JavaScript之浏览器对象_动力节点Java学院整理
Jul 03 Javascript
vue页面加载闪烁问题的解决方法
Mar 28 Javascript
vue+webpack中配置ESLint
Nov 07 Javascript
jquery实现Ajax请求的几种常见方式总结
May 28 jQuery
关于ckeditor在bootstrap中modal中弹框无法输入的解决方法
Sep 11 Javascript
浅探express路由和中间件的实现
Sep 30 Javascript
JavaScript使用FileReader实现图片上传预览效果
Mar 27 #Javascript
js防刷新的倒计时代码 js倒计时代码
Sep 06 #Javascript
JavaScript中运算符规则和隐式类型转换示例详解
Sep 06 #Javascript
详解Vue.js组件可复用性的混合(mixin)方式和自定义指令
Sep 06 #Javascript
轻松玩转BootstrapTable(后端使用SpringMVC+Hibernate)
Sep 06 #Javascript
vue mixins组件复用的几种方式(小结)
Sep 06 #Javascript
JavaScript 中Date对象的格式化代码方法汇总
Sep 06 #Javascript
You might like
php基础知识:类与对象(2) 自动加载对象
2006/12/13 PHP
destoon切换城市后实现logo旁边显示地区名称的方法
2014/08/21 PHP
Laravel实现用户注册和登录
2015/01/23 PHP
PHP实用函数分享之去除多余的0
2015/02/06 PHP
微信公众平台开发之配置与请求
2015/08/26 PHP
双冒号 ::在PHP中的使用情况
2015/11/05 PHP
JavaScript面向对象编程
2008/03/02 Javascript
根据经纬度计算地球上两点之间的距离js实现代码
2013/03/05 Javascript
浅析jQuery对select操作小结(遍历option,操作option)
2013/07/04 Javascript
简单的Jquery遮罩层代码实例
2013/11/14 Javascript
js中flexible.js实现淘宝弹性布局方案
2020/06/23 Javascript
8 行 Node.js 代码实现代理服务器
2016/12/05 Javascript
jQuery使用siblings获取某元素所有同辈(兄弟姐妹)元素用法示例
2017/01/30 Javascript
js实现楼层导航功能
2017/02/23 Javascript
Vue.js 2.0 移动端拍照压缩图片上传预览功能
2017/03/06 Javascript
关于jQuery库冲突的完美解决办法
2017/05/20 jQuery
详解vue.js+UEditor集成 [前后端分离项目]
2017/07/07 Javascript
小程序实现订单倒计时功能
2019/04/23 Javascript
Vee-validate 父组件获取子组件表单校验结果的实例代码
2019/05/20 Javascript
Vue移动端用淘宝弹性布局lib-flexible插件做适配的方法
2020/05/26 Javascript
浅谈vue项目,访问路径#号的问题
2020/08/14 Javascript
[15:46]教你分分钟做大人——沙王
2015/03/11 DOTA
[01:14:55]EG vs Spirit Supermajor 败者组 BO3 第三场 6.4
2018/06/05 DOTA
完美解决python遍历删除字典里值为空的元素报错问题
2016/09/11 Python
python写一个md5解密器示例
2018/02/23 Python
python创造虚拟环境方法总结
2019/03/04 Python
python实现小世界网络生成
2019/11/21 Python
关于Keras模型可视化教程及关键问题的解决
2020/01/24 Python
IDLE下Python文件编辑和运行操作
2020/04/25 Python
Python tkinter实现简单加法计算器代码实例
2020/05/13 Python
2015大学迎新晚会主持词
2015/07/16 职场文书
《失物招领》教学反思
2016/02/20 职场文书
mysql函数全面总结
2021/11/11 MySQL
java executor包参数处理功能 
2022/02/15 Java/Android
如何创建一个创建MySQL数据库中的datetime类型
2022/03/21 MySQL
Oracle删除归档日志及添加定时任务
2022/06/28 Oracle