##Decorator模式(*) ###总结 向基本对象添加(装饰)属性或方法, 而不是进行子类化
###例子 eg.1简单实现-对对象的属性扩展 function vehicle(vehicleType) { this.xxx = ...; } var truck = new vehicle('truck'); truck.setColor = function(color){} truck.setModel = function(modelName){}
eg.2多个Decorator 装饰对象
function MacBook() {
this.cost = function(){return 997;}
this.screenSize = funciton(){return 11.6;}
}
//Decorator 1
function Memory(macbook){
var v = macbook.cost();
macbook.cost = function(){
return v+75;
}
}
//Decorator2
function Engraving(macbook){
var v = macbook.cost();
macbook.cost = function(){
return v+200;
}
}
//Decorator3.4.5....
var mb = new MacBook();
Memory(mb);
Engraving(mb);
mb.cost();
eg.3接口与抽象Decorator
为MacBook定义的接口
var MacBook = new Interface(""Macbook",["addEngraving","addParallels","add4GBRam"...]);
MacBook.prototype = {
addEngraving:function(){},
addOarallels:function(){},
add4GBRam:function(){},
...
}
var MacbookDecorator = function(macbook){
this.macbook = macbook;
//接口检验
}
MacbookDecorator.prototype = {
addEngraving:function(){
return this,macbook.addEngraving();
}
...
}
var CaseDecorator = function (macbook) {
this.superclass.constructor(macbook);
}
extend(CaseDecorator, MacbookDecorator);
CaseDecorator.prototype.addCase = function(){
return this.macbook.addCase()+"";
}
var mb = new MacBookDecorator()
mb = new CaseDecorator(mb);
###分析 装饰者可以动态修改对象 为对象创建装饰者比维护每个对象的单个子类要更好一些