给对象动态增加职责的方式称为装饰者模式。装饰者模式能够在不改变对象自身的基础上,在程序运行期间给对象动态地添职责。相比于继承方式,装饰者模式更轻便、更灵活,给人一种“即用即付”的感觉。
/** * pre:装饰者模式 * 在不改变原有对象的基础上,给对象增加一些职责 */ //--------- 示例1 ----------- var func = function() { alert(1); }; var _func = func; func = function() { _func(); alert(2); }; func(); //--------- 示例2 ---------- /** * 上个示例会导致this丢失 * 以下示例是使用aop模式为func动态的添加功能。 */ Function.prototype.before = function(beforeFn) { var _self = this; return function() { beforeFn.apply(this, arguments); _self(); }; }; Function.prototype.after = function(afterFn) { var _self = this; return function() { _self(); afterFn.apply(this, arguments); }; }; var func = function() { console.log(2); }; var fn1 = function(){ console.log(1); }; var fn3 = function(){ console.log(3); }; func = func.before(fn1).after(fn3); func(); /** * 装饰者模式与代理模式非常的像,两者都描述了怎样为对象提供间接的引用。 * 它们最大的区别就是设计的意图和目的。 * 1、代理模式的设计目的是,当访问本地不方便或者不需要访问本体时,为本体提供一个替代者。本体提供了关键的功能,代理提供或 * 拒绝对它的访问,或者在访问本体之前做一些事情。代理模式强调的是一种本体和代理之间的关系,而这种关系在一开始就可以被确定。 * 2、而装饰者模式,是为对象动态的添加行为。用于一开始不能确定对象的全部功能时。 */
作者:『Stinchan』
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。