Javascript乱弹设计模式系列(3) - 装饰者模式(Decorator)
2010-09-14 13:35:20 来源:WEB开发网在方法之后添加行为:
function MakeInChinaDecorator(manifdder) {
//
}
inheritClass(MakeInChinaDecorator, ManifdderDecorator);
//
MakeInChinaDecorator.prototype.getPrice = function() {
return this.manifdder.getPrice() + 100.0;
};
实际上刚才上面的那个例子,就是方法之后添加行为的方式,当实例化MakeInChinaDecorator对象的时候,它的装饰目的是为了价格上的差异,当调用getPrice(方法之后)的时候,价格上才得以体现出来,在原来价格的基础上加上100.0。
而在方法之前添加行为,我这里在增加一个复印机的颜色装饰类:
function ColorDecorator(manifdder, color) {
ManifdderDecorator.call(this,manifdder);
this.color = color;
}
inheritClass(ColorDecorator, ManifdderDecorator);
ColorDecorator.prototype.getDescription = function() {
return this.manifdder.getDescription() + ": " + "它的颜色是" + this.color;
};
当实例化ColorDecorator对象的时候,它的装饰目的已经在构造函数中得到颜色上的体现,因此它是在getDescription()方法调用之前就得到体现了。
现在执行它:
manifdder = new ColorDecorator(manifdder, "白色");
alert(manifdder.getDescription()); //得到“它的颜色是白色”
4. 现在我要实现多功能复印机,还具有打印,扫描,传真功能,那么开始添加它们的装饰类:
function PrintDecorator(manifdder) {
ManifdderDecorator.call(this,manifdder);
}
inheritClass(PrintDecorator, ManifdderDecorator);
PrintDecorator.prototype.getDescription = function() {
return this.manifdder.getDescription() + ": " + "它具有打印功能. ";
};
PrintDecorator.prototype.getPrice = function() {
return this.manifdder.getPrice() + 220.0;
};
PrintDecorator.prototype.print = function() {
return "Print!";
};
Tags:Javascript 乱弹 设计模式
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接