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 相关文章推荐
面向对象的编程思想在javascript中的运用上部
Nov 20 Javascript
JS中使用DOM来控制HTML元素
Jul 31 Javascript
如何使用jquery实现文字上下滚动效果
Oct 12 Javascript
jquery select2的使用心得(推荐)
Dec 04 Javascript
设置jquery UI 控件的大小方法
Dec 12 Javascript
基于jQuery实现滚动刷新效果
Jan 09 Javascript
easyui 中的datagrid跨页勾选问题的实现方法
Jan 18 Javascript
Vue表单验证插件Vue Validator使用方法详解
Apr 07 Javascript
js构造函数创建对象是否加new问题
Jan 22 Javascript
vue实现放大镜效果
Sep 17 Javascript
WebStorm无法正确识别Vue3组合式API的解决方案
Feb 18 Vue.js
在JavaScript中如何使用宏详解
May 06 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网站开发中常用的8个小技巧
2015/02/13 PHP
php编程每天必学之表单验证
2016/03/01 PHP
Thinkphp事务操作实例(推荐)
2017/04/01 PHP
mac系统下安装多个php并自由切换的方法详解
2017/04/21 PHP
thinkphp5框架API token身份验证功能示例
2019/05/21 PHP
window.onload 加载完毕的问题及解决方案(上)
2009/07/09 Javascript
分享XmlHttpRequest调用Webservice的一点心得
2012/07/20 Javascript
关于IE BUG与字符串截取substr的解决办法
2013/04/10 Javascript
JQuery分别取得每行最后一列和最后一行的示例代码
2013/08/18 Javascript
jQuery制作简洁的多级联动Select下拉框
2014/12/23 Javascript
基于Jquery插件实现跨域异步上传文件功能
2016/04/26 Javascript
Bootstrap插件全集
2016/07/18 Javascript
利用pm2部署多个node.js项目的配置教程
2017/10/22 Javascript
vue 通过下拉框组件学习vue中的父子通讯
2017/12/19 Javascript
一篇文章,教你学会Vue CLI 插件开发
2019/04/17 Javascript
Bootstrap实现省市区三级联动(亲测可用)
2019/07/26 Javascript
js 对象使用的小技巧实例分析
2019/11/08 Javascript
vue实现信息管理系统
2020/05/30 Javascript
JS中准确判断变量类型的方法
2020/06/01 Javascript
vue - props 声明数组和对象操作
2020/07/30 Javascript
详解python之配置日志的几种方式
2017/05/22 Python
python 随机数使用方法,推导以及字符串,双色球小程序实例
2017/09/12 Python
Python基础练习之用户登录实现代码分享
2017/11/08 Python
python读取txt文件中特定位置字符的方法
2018/12/24 Python
Django中的cookie和session
2019/08/27 Python
Python使用turtle库绘制小猪佩奇(实例代码)
2020/01/16 Python
python 实现批量图片识别并翻译
2020/11/02 Python
如何用python实现一个HTTP连接池
2021/01/14 Python
Speedo速比涛德国官方网站:世界领先的泳装品牌
2019/08/26 全球购物
电大毕业生自我鉴定
2013/11/10 职场文书
司法建议书范文
2014/05/13 职场文书
会计学习心得体会
2014/09/09 职场文书
违反纪律检讨书范文
2015/05/07 职场文书
30岁前绝不能错过的10本书
2019/08/08 职场文书
2019年汽车租赁合同范本!
2019/08/12 职场文书
Nginx 负载均衡是什么以及该如何配置
2021/03/31 Servers