JS设计模式8 - The Decorator Pattern

装饰者模式

JS设计模式8 - The Decorator Pattern_第1张图片
装饰者

目的

动态的包装对象,使之具有额外的能力。

何时使用

  1. 对象的责任和行为需要动态改变

举例

当我们发送邮件的时候,如果邮件是发送到公司外网,往往会加上保密说明等附加信息,这时候邮件本身并没有改变,可以用装饰者模式。

代码

下面的例子中,一台macbook不断增加配件,所以价格也不断变化,可以看到这么写代码还是比较漂亮的。

// The constructor to decorate
function MacBook() {

    this.cost = function () { return 997; };
    this.screenSize = function () { return 11.6; };

}

// Decorator 1
function memory( macbook ) {

    var v = macbook.cost();
    macbook.cost = function() {
        return v + 75;
    };

}

// Decorator 2
function engraving( macbook ){

    var v = macbook.cost();
    macbook.cost = function(){
        return v + 200;
    };

}

// Decorator 3
function insurance( macbook ){

    var v = macbook.cost();
    macbook.cost = function(){
        return v + 250;
    };

}

var mb = new MacBook();
memory( mb );
engraving( mb );
insurance( mb );

// Outputs: 1522
console.log( mb.cost() );

// Outputs: 11.6
console.log( mb.screenSize() );

注意cost接口是不变得。这和静态语言是一致的。

你可能感兴趣的:(JS设计模式8 - The Decorator Pattern)