JavaScript设计模式_12_装饰者模式

给对象动态增加职责的方式称为装饰者模式。装饰者模式能够在不改变对象自身的基础上,在程序运行期间给对象动态地添职责。相比于继承方式,装饰者模式更轻便、更灵活,给人一种“即用即付”的感觉。

/**
 * 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、而装饰者模式,是为对象动态的添加行为。用于一开始不能确定对象的全部功能时。
 */
posted @ 2017-06-22 15:29  Stinchan  阅读(119)  评论(0编辑  收藏  举报