javascript设计模式笔记-12 装饰者模式

简述

  • 像是包装礼品一样,一层一层的包装起来。
  • 装饰者模式适合给对象添加新特性。

例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function Water () {
    this.desc = '水';
    this.cost = function () {
        return 0;
    };
}

// 咖啡
function Coffee (water) {
    this.desc = '咖啡';
    this.cost = function () {
        return 5 + water.cost();
    };
}

// 糖
function Sugar (water) {
    this.desc = '糖';
    this.cost = function () {
        return 2 + water.cost();
    };
}

// 咖啡
var coffee = new Coffee(new Water());
console.log(coffee.cost()); // 5

//加糖的咖啡
var coffee2 = new Sugar(coffee);
console.log(coffee2.cost()); // 7