我正在用 Javascript 实现装饰器模式。
我在维基百科中看到了这个例子
// Class to be decorated
function Coffee() {
this.cost = function() {
return 1;
};
}
// Decorator A
function Milk(coffee) {
this.cost = function() {
return coffee.cost() + 0.5;
};
}
// Decorator B
function Whip(coffee) {
this.cost = function() {
return coffee.cost() + 0.7;
};
}
// Decorator C
function Sprinkles(coffee) {
this.cost = function() {
return coffee.cost() + 0.2;
};
}
// Here's one way of using it
var coffee = new Milk(new Whip(new Sprinkles(new Coffee())));
alert( coffee.cost() );
// Here's another
var coffee = new Coffee();
coffee = new Sprinkles(coffee);
coffee = new Whip(coffee);
coffee = new Milk(coffee);
alert(coffee.cost());
现在我的问题是该模式仍然是装饰器模式,在 cost() 函数的开头或结尾调用父类是否重要?
现在,我意识到这取决于每个装饰器的作用......例如,如果你在装饰器中进行乘法或除法而不是加法或减法,它当然会保证不同的结果。
但是除了我在上一段中所说的原因之外,还有什么理由在之前或之后拨打电话吗?