js装饰设计模式学习心得


Posted in Javascript onFebruary 17, 2018

装饰设计模式

每种设都有其独特的应用场景和解决问题的方式, 装饰设计模式是动态的为对象添加新的功能, 是一种用于代替继承的技术,无需通过继承增加子类就能扩展对象的新功能。使用对象的关联关系代替继承关系,更加灵活,同时避免类型体系的快速膨胀, 这种模式适合新添加的功能不足以用继承为代价解决问题的情况时使用 - 杀鸡焉用宰牛刀 ^_^
装饰设计模式: 动态地为一个对象添加一些额外的职责,若要扩展一个对象的功能,装饰者提供了比继承更有弹性的替代方案。

结构图:

js装饰设计模式学习心得

接口

var Bicycle = new Interface('Bicycle', ['assemble', 'wash', 'repair', 'getPrice']);

对象类

var AcmeComfortCuiser = function(){
  
};
AcmeComfortCuiser.prototype = {
  assemble: function(){
    
  },
  wash: function(){
    
  },
  repair: function(){
    
  },
  getPrice: function(){
    
  }
}

装饰类

var BicycleDecorator = function(bicycle){
  Interface.ensureImplements(bicycle, Bicycle);
  this.bicycle = bicycle;
};
BicycleDecorator.prototype = {
  assemble: function(){
    return this.bicycle.assemble();
  },
  wash: function(){
    return this.bicycle.wash();
  },
  repair: function(){
    return this.bicycle.repair();
  },
  getPrice: function(){
    return this.bicycle.getPrice();
  }
}

拓展类

var HeadlightDecorator = function(bicycle){
    BicycleDecorator.call(this, bicycle);
  };
  extend(HeadlightDecorator, BicycleDecorator);
  HeadlightDecorator.prototype.getPrice = function(){
    return this.bicycle.getPrice() + 15.00;
  }
Javascript 相关文章推荐
jQuery 性能优化指南(2)
May 21 Javascript
javascript继承机制实例详解
Nov 20 Javascript
js计算德州扑克牌面值的方法
Mar 04 Javascript
javascript实现链接单选效果的方法
May 13 Javascript
jQuery实现图片左右滚动特效
Apr 20 Javascript
javascript省市级联功能实现方法实例详解
Oct 20 Javascript
浅析jQuery操作select控件的取值和设值
Dec 07 Javascript
JS如何生成一个不重复的ID的函数
Dec 25 Javascript
vue中的自定义分页插件组件的示例
Aug 18 Javascript
浅谈VUE防抖与节流的最佳解决方案(函数式组件)
May 22 Javascript
vue实现公共方法抽离
Jul 31 Javascript
最新最全的手机号验证正则表达式
Feb 24 Javascript
Vue组件库发布到npm详解
Feb 17 #Javascript
JS声明对象时属性名加引号与不加引号的问题及解决方法
Feb 16 #Javascript
JavaScript中严格判断NaN的方法
Feb 16 #Javascript
[原创]js实现保存文本框内容为本地文件兼容IE,chrome,火狐浏览器
Feb 14 #Javascript
jQuery实现鼠标响应式透明度渐变动画效果示例
Feb 13 #jQuery
jQuery实现鼠标响应式淘宝动画效果示例
Feb 13 #jQuery
jQuery实现的鼠标响应缓冲动画效果示例
Feb 13 #jQuery
You might like
PHP函数常用用法小结
2010/02/08 PHP
基于MySQL到MongoDB简易对照表的详解
2013/06/03 PHP
javascript 中对象的继承〔转贴〕
2007/01/22 Javascript
动态表格Table类的实现
2009/08/26 Javascript
基于jQuery的倒计时插件代码
2011/05/07 Javascript
用Mootools获得操作索引的两种方法分享
2011/12/12 Javascript
jQuery根据表单name获取值的方法
2016/05/24 Javascript
Javascript使用uploadify来实现多文件上传
2016/11/16 Javascript
jqGrid翻页时数据选中丢失问题的解决办法
2017/02/13 Javascript
vue通过路由实现页面刷新的方法
2018/01/25 Javascript
如何将你的AngularJS1.x应用迁移至React的方法
2018/02/01 Javascript
vue cli webpack中使用sass的方法
2018/02/24 Javascript
vue实现中部导航栏布局功能
2019/07/30 Javascript
ant design vue datepicker日期选择器中文化操作
2020/10/28 Javascript
Vue实现菜单切换功能
2020/11/08 Javascript
[01:19:46]DOTA2-DPC中国联赛 正赛 SAG vs DLG BO3 第一场 2月28日
2021/03/11 DOTA
使用C语言来扩展Python程序和Zope服务器的教程
2015/04/14 Python
python 的列表遍历删除实现代码
2020/04/12 Python
Python探索之URL Dispatcher实例详解
2017/10/28 Python
Python2与python3中 for 循环语句基础与实例分析
2017/11/20 Python
Python基于PyGraphics包实现图片截取功能的方法
2017/12/21 Python
Python数据拟合与广义线性回归算法学习
2017/12/22 Python
利用python将图片转换成excel文档格式
2017/12/30 Python
Python学生成绩管理系统简洁版
2020/04/05 Python
Python多线程threading模块用法实例分析
2019/05/22 Python
Pycharm配置PyQt5环境的教程
2020/04/02 Python
python3爬虫中引用Queue的实例讲解
2020/11/24 Python
兰蔻俄罗斯官方网站:Lancome俄罗斯
2019/12/09 全球购物
高中语文教学反思
2014/01/16 职场文书
学历公证委托书
2014/04/09 职场文书
应届生求职信
2014/05/31 职场文书
中职生自荐信范文
2014/06/15 职场文书
大学生干部培训心得体会
2016/01/06 职场文书
2016年大学光棍节活动总结
2016/04/05 职场文书
python机器学习创建基于规则聊天机器人过程示例详解
2021/11/02 Python
MYSQL中文乱码问题的解决方案
2022/06/14 MySQL