设计模式7—装饰者模式【结构型】

参考:http://blog.chinaunix.net/uid-26672038-id-4364155.html

装饰者模式特点:【看书

    1. 不修改原对象的原本结构来进行功能添加。
    2. 装饰对象和原对象具有相同的接口,可以使客户以与原对象相同的方式使用装饰对象。
    3. 装饰对象中包含原对象的引用,即装饰对象为真正的原对象在此包装的对象。

 

装饰函数:这个 还是 比较有用的,比如我们想给 window 绑定 onload 事件,但是 又不确定 这个事件是不是已经被其他人绑定过,为了避免 覆盖 掉之前的 window.onload 函数 的行为,

   我们一般都会先保存(备份)好原先的window.onload,把他放入新的 window.onload 里执行:

window.onload = function(){
  alert(1)    
}

var _onload = window.onload || function(){};

window.onload = function(){
  _onload.apply(window); // window.onload 函数内部的this是指向window的,这里调用时也要给它正确的指向
  alert(1);
}

重点:装饰者模式中,备份对象时,往往是把一个对象的方法给一个变量保存。这时通过变量直接调用会让方法失去正确的this指向,所以调用时需要通过apply方法修正this的指向。

实践案例:在给 浙里办项目【该项目使用jQuery开发】中 修改引入的 JS-SDK 版本【JS_SDK.js发布在CDN上】时,因为 新版 JS-SDK 中 使用了 window.onload, 而 项目中的 js也使用了window.onload。

       结果导致JS_SDK中的 window.onload 被覆盖,失去效用。当时 没有 想到 用 装饰者模式 可以解决这个问题,是通过 jQuery 的 onload 方法去解决的【jQuery的onload是可以多次绑定 事件函数的】。

 

posted @ 2021-03-11 22:12  吴飞ff  阅读(45)  评论(0)    收藏  举报