JavaScript设计模式之装饰者模式介绍


Posted in Javascript onDecember 28, 2014

装饰者模式说明

说明:通一个类来动态的对另一个类的功能对象进行前或后的修饰,给它辅加一些额外的功能; 这是对一个类对象功能的装饰,装饰的类跟被装饰的类,要求拥有相同的访问接口方法(功能),这在动态面向对象类里,一般以实现同一个接口(interface)来约束实现;装饰类的要有对被装饰类的引用,用于在装饰类的相应方法,调用相应被装饰类的方法,然后对其进行修饰;

场景举例:

1>. 比如我们生活中的穿衣服, 一件衬衣,一件西装外套,一条裤子,一条领带,一双漂亮的皮鞋; 每多穿一件,都是对前面一件或全身的装饰;

2>. 比如我们有个类下的功能方法,可能用于写日志,可能用于用户登陆这样的功能,也许写入日志前需要获取当前操作者信息,或是登录成功后,写入一条日志;写入日志之前的额外操作,它的总体来说也还是一个写日志的目的;登孙成功后写日志,它总体上也是一个登录过程的操作信息;

因此装饰者模式用于实现,两者相似操作的一种场景;就是装饰者对被装饰者功能对象的扩展,本质还是原方法相同的功能范围;

实例源码

1. 被装饰者类

function Wear() {

    

}
Wear.prototype.Shirt = function() {

    //穿了件衬衫

console.log('穿上衬衫');

}

2. 装饰者类

function Decorator(wear) {

    this.wear = wear;

}
Decorator.prototype.Shirt = function() {

    this.wear.Shirt();

    //穿了件衬衫后,我又加上了领带

}

3. 使用方法

var wear = new Wear();

var decorator = new Decorator(wear);

decorator.Shirt();

这样就实现了对 Wear 穿衬衫这个功能对象的动态扩展装饰,你也不必知道原被装饰方法是如何执行,只要知道它的功能是什么就可以,然后知道我们要对其辅加的额外功能是什么就可以;

其他说明

装饰者模式,真正提现了面向对象方法的:对扩展开放,对修改关闭的原则;所有想要的功能方法,都是在没有修改[被装饰类Wear]在扩展[装饰者这个类Decorator]的情况下进行的;

装饰者模式的一个主要特点,就是装饰者对被装饰者的引用,以实现对被装饰者的无修改装饰;

模拟下:先穿衬衫,再穿领带,再穿西装的场景: 上面的被装饰者不变了:

2. 装饰者类:

function Decorator(wear) {

    this.wear = wear;

}

Decorator.prototype.Shirt = function() {

    this.wear.Shirt(); //这里只穿衬衫;

}

3. 创建类似继承 Decorator 子类的 穿领带类与穿西装类

function Decorator_Tie(decorator) {

    this.decorator = decorator;

}    

Decorator_Tie.prototype.Shirt = function() {

    this.decorator.Shirt(); //穿上衬衫

    console.log('再戴上领带');

}
function Decorator_Western (decorator) {

    this.decorator =  decorator;

}

Decorator_Western.prototype.Shirt = function() {

    this.decorator.Shirt();

    console.log('再穿上西装');

}

使用方法:

//先穿上衬衫

var wear = new Wear();

var decorator = new Decorator(wear);

//decorator.Shirt();

//再戴上领带

var tie = new Decorator_Tie(decorator);

//tie.Shirt();

//再穿上西装

var western = new Decorator_Western(tie);

western.Shirt();

这就是一个穿衣服装饰的模拟例子;

Javascript 相关文章推荐
JavaScript初学者应注意的七个细节小结
Jan 30 Javascript
jquery判断浏览器类型的代码
Nov 05 Javascript
js如何取消事件冒泡
Sep 23 Javascript
解决jQuery使用JSONP时产生的错误
Dec 02 Javascript
浅析javascript异步执行函数导致的变量变化问题解决思路
May 13 Javascript
javascript中异常处理案例(推荐)
Oct 03 Javascript
canvas 画布在主流浏览器中的尺寸限制详细介绍
Dec 15 Javascript
Javascript 对cookie操作详解及实例
Dec 29 Javascript
js实现文字列表无缝滚动效果
Jun 23 Javascript
使用imba.io框架得到比 vue 快50倍的性能基准
Jun 17 Javascript
JS三级联动代码格式实例详解
Dec 30 Javascript
详解element上传组件before-remove钩子问题解决
Apr 08 Javascript
浅谈Javascript Base64 加密解密
Dec 28 #Javascript
JavaScript设计模式之代理模式介绍
Dec 28 #Javascript
JavaScript设计模式之外观模式介绍
Dec 28 #Javascript
JavaScript阻止事件冒泡示例分享
Dec 28 #Javascript
jQuery中removeData()方法用法实例
Dec 27 #Javascript
jQuery中data()方法用法实例
Dec 27 #Javascript
jQuery中index()方法用法实例
Dec 27 #Javascript
You might like
php设计模式 Prototype (原型模式)代码
2011/06/26 PHP
ThinkPHP3.1新特性之G方法的使用
2014/06/19 PHP
javascript与asp.net(c#)互相调用方法
2009/12/13 Javascript
jQuery 动态酷效果实现总结
2009/12/27 Javascript
简洁短小的 JavaScript IE 浏览器判定代码
2010/03/21 Javascript
js 获取Listbox选择的值的代码
2010/04/15 Javascript
jquery实现人性化的有选择性禁用鼠标右键
2014/06/30 Javascript
教你如何在 Javascript 文件里使用 .Net MVC Razor 语法
2014/07/23 Javascript
浅谈 javascript 事件处理
2015/01/04 Javascript
一看就懂:jsonp详解
2015/06/01 Javascript
详解基于Bootstrap扁平化的后台框架Ace
2015/11/27 Javascript
详解js数组的完全随机排列算法
2016/12/16 Javascript
BootStrap点击保存后实现模态框自动关闭的思路(模态框)
2017/09/26 Javascript
教你如何编写Vue.js的单元测试的方法
2018/10/17 Javascript
原生javascript中this几种常见用法总结
2020/02/24 Javascript
JavaScript或jQuery 获取option value值方法解析
2020/05/12 jQuery
[03:59]DOTA2英雄梦之声_第07期_水晶室女
2014/06/23 DOTA
python操作数据库之sqlite3打开数据库、删除、修改示例
2014/03/13 Python
以一段代码为实例快速入门Python2.7
2015/03/31 Python
python根据日期返回星期几的方法
2015/07/06 Python
Python字符串格式化的方法(两种)
2017/09/19 Python
Python爬虫爬取杭州24时温度并展示操作示例
2020/03/27 Python
ROSEFIELD手表荷兰官方网上商店:北欧极简设计女士腕表品牌
2018/01/24 全球购物
JustFab加拿大:女鞋、靴子、手袋和服装在线
2018/05/18 全球购物
Stio官网:男女、儿童户外服装
2019/12/13 全球购物
设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
2014/12/30 面试题
Shell脚本如何向终端输出信息
2014/04/25 面试题
大学生简历中个人的自我评价
2013/10/06 职场文书
营业员个人总结的自我评价
2013/10/25 职场文书
幼儿园教师奖惩制度
2014/02/01 职场文书
浪费资源的建议书
2014/03/12 职场文书
双方协议书
2014/04/22 职场文书
2015年个人现实表现材料
2014/12/10 职场文书
先进集体申报材料
2014/12/25 职场文书
超市员工辞职信范文
2015/05/12 职场文书
小学毕业感言100字
2015/07/30 职场文书